IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Unity的优化系列 - 优化声音

    u010019717发表于 2016-05-23 09:02:20
    love 0

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


    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



    


沪ICP备19023445号-2号
友情链接