-
Creator 版本: < 3.72 >
-
目标平台: < 谷歌浏览器>
-
重现方式:百分百复现
我在主场景下加了一个AudioSource 组件,然后再onLoad回调下延迟5秒去播放音频,使用的是playOneShot方法。
这个时候是没有声音的,因为我没有和网页交互。过了一会我点击网页,此时播放了刚才的音频,显然这不是我想要的操作。你们处理过这个问题嘛
1赞
标记交互,没点击就不播放
Web平台限制音视频自动播放,没办法,处理方法就是逻辑写在首次交互的回调里
这个是音频主键 播放一次音效的地方 在这里用个延时去停止有没有什么问题呢?
3.72版本构建的web版本 其它情况未知
挂机使用schedule一直播放一个音频,大约半个小时后 播放声音就会卡卡的
一个节点挂载了一个音频组件然后我使用play方法去播放
audioCom.clip = asset
audioCom.play()
后来经过研究发现,在引擎的operation-queue.ts 这个文件中,使用play去播放音频的时候会先once注册一个事件,等到这个音频播放完后就去emit,但是由于在图二中没有正常移除,所以这个_callbackTable就会越来越大 当长度很大的时候,emit遍历的时候直接卡死了
web端-处理ios平台音频前后台多次切换就不播放问题以及安卓平台首次进入不会播放问题。(3.72版本)
> 在官方文档中看,web页面上的游戏,是不会自动播放音乐了,需要用户交互后才能开始播放。
通过查看引擎pal/web/player-web.ts,在AudioPlayerWeb类的_doPlay方法中,
是会判断一下音频上下文的isRunning状态,
假如此时强行调用AudioContext的resume方法
那么可以做到在安卓不需要交互就能播放音频。(在ios上还是需要用户点击一下页面)
此时还有一个问题需要处理,就是在ios上多次前后台切换会发现背景音乐不播放了。
同样的是在这个文件在AudioContextAgent类的onstatechange方法中强行去恢复。
1赞