博客数据丢失,刚恢复一年前的备份!--QQ群:162541429

AssetBundle卸载Audio资源导致不能播放的坑

Unity 小宝 141℃ 0评论

最近项目准备上线,发现场景切换资源卸载后。再也不能播放。一直找不到原因。后打断点,然后通过提示终于在百度找到一篇帖子。这里特意转过来。扩散一下。

以下为转帖原文:

坑之前序

AssetBundle下加载音频后立即调用Unload(false),会造成音频播放不出来,且会无限等待

 

坑之原因

大家都知道,AssetBundle的内存消耗机制,为了最大程度的降低内存的消耗,一般当一个AssetBundle不可能被其它AssetBundle引用时,当LoadAsset之后,就可以直接调用AssetBundle.Unload(false)来清掉bundle所占用的内存

音频资源我都是采用动态加载并播放的,没有直接挂载的情况,而且都是一个音频一个bundle,所以它不存在依赖或多个打在一个bundle里面的问题,我用的的代码如下

1473426316_5648

但是这样会造成音频会播不出来,因为LoadAsset并不等于Load了完整的音频,它还需要依赖AssetBundle进行异步的音频硬件解码!

经测试,当你把它Unload(false)后,它并不会报错,而是会一直无限期等待,且永远处于AudioDataLoadState.Loading状态,因为没有播放,也就没办法释放这个Asset资源,当你的音频加载过多后,就会造成内存泄漏!

注:并不是所有音频都会播不出来,那种解码时间长的会播不出来,解码时间一瞬间完成的可以正常播放,经测试所有音频,在LoadAsset之后一到两帧可以解码完成

坑之修复

AudioClip里面有一个状态来指示它是否加载完成,所以我们只需要等待它加载完全后再去Unload(false)并播放就可以了,代码如下:

1473426391_3903

 

 


以上为原贴内容。转载至:

http://blog.csdn.net/gz_huangzl/article/details/52490447

转载请注明:小宝个人笔记 » AssetBundle卸载Audio资源导致不能播放的坑

喜欢 (0)or分享 (0)
本站所有内容如未标明转载的内容,均为原创内容。转载请注明来源!