c# - 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");
}
}
解决方案
那是因为一旦你调用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");
}
推荐阅读
- eclipse - 我可以使用哪些工具和日志来找出 Eclipse 中的服务器无法启动的原因
- java - 仅限公共访问约束的注释
- angular - 在ngrx Effect 中的switchmap(api call) 之后访问一个action payload
- sql - 如何组合2个表的部分数据?
- php - 根据配置数组选择方法
- javascript - 我可以在 React 头盔标签中使用 react-i18next 反式标签吗?
- reactjs - npx create-react-app 没有进一步进行并停止在“使用 cra-template 安装 react、react-dom 和 react-scripts
- python - 如果与搜索值匹配,如何点击搜索引擎结果
- algorithm - 代码的最坏情况和总运行时间?
- reactjs - 有没有人想出如何解决 AG-Grid-Enterprise 对 React 16 的厌恶?