孙广东 2016.5.22
优化游戏中的声音! 针对不同的使用做不同的设置!!!!
为什么我的游戏加载时间如此之长?
游戏声音为什么有很大差异?
声音文件为什么占用这么多内存?
为什么在播放声音的同时看到有些滞后或不能及时播放?
创建要给Unity 项目然后做为测试:
第 1 步) 设置场景
如下所示 ︰ 画布上的两个按钮(一个MusicButton、SoundButton)。带两个音频AudioSource。一个空的游戏对象,命名为SoundManager。
第 2 步) 设置下面的脚本 ︰
public class SoundManager : MonoBehaviour { #region BACKGROUND_MUSIC public AudioClip[] backgroundMusicClipsArray; public AudioSource backgroundMusicSource; #endregion #region SFX_SOUNDS public AudioClip[] SFXSounds; public AudioSource SFXAudioSource; #endregion #region PUBLIC_METHODS public void PlayRandomMusic() { backgroundMusicSource.clip = backgroundMusicClipsArray[Random.Range(0, backgroundMusicClipsArray.Length)]; backgroundMusicSource.Play(); } public void PlayRandomSFXSounds() { SFXAudioSource.PlayOneShot(SFXSounds[Random.Range(0, SFXSounds.Length)]); } #endregion }
所以在这里两个数组的AudioClips分别命名 backgroundMusicClipsArray() 和 SFXSounds() 为 背景音乐 和 SFX 声音了
在这里, PlayRandomMusic()和PlayRandomSFXSounds()将 播放随机音乐 / 声音时调用。将这些方法链接到场景中的按钮 。保持所有的 AudioClips 设置作为默认值
现在在编辑器中测试它,如果它工作正常。
第 3 步) 准备编译 Android 的生成 ︰
生成 android 版本,不忘记选择Development Build和 Auto Connect Profiler 。
"在您的手机上开始游戏。你注意到看到怪异的事情?"
"多少时间做它需要加载游戏?"
从Unity的默认的初始屏幕, 花了大约10-15 秒钟以加载!我有关于15个 背景音乐音频剪辑和 约40 个 SFX 声音剪辑。
查阅 "Total Audio Memory" 指示器,显示为145 MB......! 总之音频约145 MB的内存占用。
怎么解决?
第 1 步) 执行几个设置调整上音频剪辑
为了更好地理解这一步,先通过下面的链接,解释了不同设置的AudioClips (正确理解是需要优化目的)
http://docs.unity3d.com/Manual/class-AudioClip.html
现在选择所有 循环的所有背景音乐 剪辑。
检查器会显示设置只是如下图所示 ︰
看到上面的图片 没有选择Preload Audio Data 。
选中 Override for Android 和设置 Load Type 为 Streaming 。
第 2 步) 准备音频生成
对我来说,游戏的载入时间从15秒到2 秒...下去 !这是关于快 5-7倍加载时间......!
注意
不同设备这可能会有所不同。
音频的总内存去从145 MBs 到 5.8 MBs 。这就是25 倍优化内存使用情况!!
在这里我们禁用PeeLoad Audio Data ; 因此没有必要更快地加载时间! 将只在需要时加载音频剪辑。
但你的问题可能是, "我一次加载所有使用的音频剪辑,他们不会产生所有的内存吗?"
如果你还记得我曾设置Load Type 为streaming ,所以这将在play时缓冲音频剪辑。一旦这个音频缓冲区被播放完了,缓存将因此卸载 释放内存。由此而引发的内存优化 !
其他问题,你可能会遇到"为什么不做和 SFX 音频相同的设置呢?"
很好,因为他们在玩游戏期间非常频繁地使用,因此会产生轻微延迟,音频听起来不对。 事实上,我会建议Load Type 设置为 Decompress onLoad (并不是全部,只是为了非常频繁的)的执行速度更快。
不管怎么说即使你有大约 50 个SFX 声音,它也不会超过 10-20 mb 的内存,这是可以接受的。
下图显示大约 40 SFXAudioClips 负载类型设置为Decompress on Load , 仍在只是大约 16 mb!