吐槽下AudioSource

我们开始设置的普通节点,每个场景都挂一个AudioSource,切换场景就有概率崩溃,因为销毁上个场景的AudioSource,再创建下个场景的AudioSource中间有个空档期,引擎找不到就崩溃,刚才测试了下,直接销毁AudioSource节点就必崩溃。崩溃位置都一模一样。

查了一会文档,正文都没写AudioSource必须是常驻节点,反倒是音频播放示例里写着。

另外建议,如果引擎代码找不到AudioSource节点,做下防御性,可以提示下AudioSource必须为常驻节点,不要直接就崩溃。
或者项目运行时检测所有节点,AudioSource节点出现2次以上给警告,这种BUG让新手处理,很头疼。

刚搜了下相关问题,道友们猜和Play On Awake,或者延迟有关,其实就是两个场景中间的空档期无AudioSource节点导致的。

为啥不创建个常驻节点咧

不是都必须常驻吧。总不能场景切换时,上一个场景的声音都还在继续播吧……

AudioSource执行stop或者pause,下面代码接着loadScene切换场景,还是崩溃,浏览器大致还会持续0.5秒左右才停止调用代码。

总不能玩家点了跳转按钮,我等0.5秒在跳转场景吧。

感觉这是浏览器行为,不是说stop就能瞬间停掉AudioSource代码调用。

踩了坑,才发现的问题,后面肯定用常驻节点了。

我做了AudioSource必报错的demo,浏览器跑起来直接点按钮。
btnTest(event) {
this.audioSource.stop();
this.audioSource.node.destroy();
// director.loadScene(‘TestScene’);
}
这里模拟切换场景的情况,必报错,你可以注释销毁代码,打开loadScene,刷新浏览器点击按钮,不出10次必定有一次报错。loadScene其实就是一次销毁audioSource过程。

NewProject.zip (1.1 MB)

也就是说你不用常驻节点,想停掉上次的背景音乐,AudioSource有很大概率会崩溃。

这种一般都是游戏启动到结束有一个常驻节点,然后将audio挂载到这个节点 ,所有都使用这一个,就不会有你说的这个问题

是的,所以问题留给官方吧,要么强制AudioSource常驻,不强制就修复切换场景导致的概率崩溃。