[置顶] Unity的优化系列2 - 优化声音

孙广东  2016.5.22


计算机生成了可选文字:


优化游戏中的声音!    针对不同的使用做不同的设置!!!!


为什么我的游戏加载时间如此之长?


游戏声音为什么有很大差异?


声音文件为什么占用这么多内存?


为什么在播放声音的同时看到有些滞后或不能及时播放


创建要给Unity 项目然后做为测试:


1 步) 设置场景


                 如下所示 ︰ 画布上的两个按钮(一个MusicButtonSoundButton)。带两个音频AudioSource。一个空的游戏对象,命名为SoundManager。


[置顶] Unity的优化系列2 - 优化声音_第1张图片


 


  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 声音剪辑。


Profiler


           查阅  "Total Audio Memory"  指示器,显示145 MB......     总之音频约145 MB的内存占用


怎么解决?


1 步) 执行几个设置调整上音频剪辑


            为了更好地理解这一步,先通过下面的链接,解释了不同设置的AudioClips (正确理解是需要优化目的)


http://docs.unity3d.com/Manual/class-AudioClip.html


现在选择所有  循环的所有背景音乐  剪辑。


检查器会显示设置只是如下图所示


Audio Clip Settings


看到上面的图片 没有选择Preload Audio Data


          选中  Override for Android 和设置  Load Type Streaming


  2 步) 准备音频生成


              对我来说,游戏的载入时间从15秒到2 ...下去 !这是关于快 5-7倍加载时间......


注意


         不同设备这可能会有所不同


Audio Memory Used 5.8 MB


音频的总内存去从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


Audio Memory Used 15.8





你可能感兴趣的:(unity,优化系列,优化声音)