【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");
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?