首页 > 解决方案 > C# - Unity - 两个对象碰撞时的音频,不工作:(

问题描述

我有问题。我正在创建一个小游戏项目,其中一个球从鬼魂中逃脱。

我正在尝试编写一个脚本,当球与鬼相撞时播放“邪恶的笑声”。

当我将碰撞代码中的音频添加到脚本中时,使玩家进入“游戏结束”场景的另一个功能停止工作

有谁知道问题可能是什么?提前非常感谢!(下面的代码)<3

public class GhostScript : MonoBehaviour

public AudioSource ghostCollision; //this is the collision sound reference

public GameObject target;   //this is the player or a reference for him
UnityEngine.AI.NavMeshAgent agent;

// Start is called before the first frame update
void Start()
{
    ghostCollision = GetComponent<AudioSource>();

    agent = GetComponent<UnityEngine.AI.NavMeshAgent>();
    if (target == null) { 
        target = GameObject.FindGameObjectWithTag("Player");
    }

}

// Update is called once per frame
void Update()
{
    agent.destination = target.transform.position;
}

public void OnCollisionEnter(Collision collision){
    if (collision.gameObject.tag == "Player"){

        ghostCollision.Play();
        SceneManager.LoadScene("menu");
    }
}

标签: c#unity3d

解决方案


那是因为一旦你调用SceneManager.LoadScene当前场景(包含你的播放器、AI 和 AudioSource)就会丢失并被新的Scene替换。为场景加载添加延迟应该可以解决问题,您可以使用Invoke(如果您更高级,则可以使用Coroutines )。

private void OnCollisionEnter(Collision other)
{
   if (other.gameObject.tag == "Player")
   {
      ghostCollision.Play();

      // Invokes the function after the AudioClip is over
      Invoke("LoadScene", ghostCollision.clip.length);
   }
}

private void LoadScene()
{
   SceneManager.LoadScene("your-scene-name");
}

推荐阅读