【Unity学习过程踩坑记录】人物移动时音频监听器似乎仍在原地

问题描述:

  项目中在Audio Manager对象下新建了一个Audio Listener子对象,并挂载了Audio Listener组件,用来跟随人物监听声音。此时代码没有报错,但运行后明显能感受到人物离中心点越远,声音越小。

 

解决:

  代码中通过audioListener = FindObjectOfType<AudioListener>().transform;获取Audio Listener对象,并输出其改变后的坐标,发现其与Player的坐标总是相同的。虽然问题不是出在这里,但是我发现,当暂停游戏并在Scene界面选中AudioListener时,其坐标显示仍是(0, 0, 0),所以我觉得可能是获取的audioListener并非我所想要的对象,于是在上述代码后增加Debug.Log(audioListener.gameObject.name);。果不其然,控制台输出了“Crosshairs camera”。查看该对象的Inspector面板,确实有一个Audio Linstener组件,其active为false所以没有报多个监听器的错误。显然,FindObjectOfType函数找的是该对象。

  经查询,FindObjectOfType函数会从hierarchy面板中所有的对象去遍历查找第一个与参数相同的对象。解决办法是直接删除Crosshairs camera的Audio Linstener组件;或者使用transform.Find(string name)方法,该方法能查找所有子对象中是否有相同名称的(但是不能查找再后面的后代),即audioListener = transform.Find("Audio Listener");

posted @ 2022-08-08 22:13  cno700  阅读(101)  评论(0编辑  收藏  举报