【转】声效优化以此改善游戏性能

为什么我的游戏加载时间这么长?

为什么在播放游戏音效的时候会有这么大的一个延迟?

为什么游戏音效文件会占据这么多的内存?

为什么在播放游戏音效的时候,会在游戏中出现一些延迟?

我是否没有正确处理游戏音效?

如果你刚接触Unity,你需要首先了解下Unity里面的声音管理是如何工作的。

Unity中的声音管理是非常简单和基本的,那么它是如何影响我的游戏的呢?

是的,它很简单,但是它能让你的游戏变得瘫痪!

为了理解上面所说的内容,让我们举一个简单的例子。

第一步 按照如下的方法设置场景:

· 生成一个带两个按钮的画布(一个按钮是MusicButton,另外一个是SoundButton)。然后在场景中加入两个声音源。然后加入一个新的游戏物体,命名为SoundManager。(当然你也可以根据你的需要来对它进行命名)。

按照下面的结构设置层次关系:

如何对Unity中的声音进行优化以提高你游戏的性能

我的场景设置就像上图展示的这样简单(这仅仅是为了给你一个概念):

如何对Unity中的声音进行优化以提高你游戏的性能

第二步 按照如下的方法设置脚本:

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
}

在这里我使用两组声音剪辑,分别命名为backgroundMusicClipsArray和SFXSounds,一个对应背景音乐,一个对应特效的声音文件。

同样的也有声音源。

现在,当调用的时候,PlayRandomMusic和PlayRandomSFXSounds将会播放随机的背景音乐/音效。这些方法按照自己的名字链接到场景中对应的按钮上。然后所有声音剪辑的设置按照默认进行设置。

现在测试下它们在编辑器里面是否能够正常工作。

第三步 准备进行一个安卓构建:

生成安卓构建,并且别忘了选上“开发版本的构建”和”自动连接调试器”。

  • “在你的手机上启动游戏。你注意到有什么奇怪的事情了么?”
  • “大概需要花多少时间来加载游戏?”

在我的例子中,它花费了大概10-15秒钟的时候才从Unity的默认开机画面加载完!我有大概15首背景音乐剪辑以及大概40首特效声音剪辑。

现在检查下分析器,看看分析中的声音音效部分。

如何对Unity中的声音进行优化以提高你游戏的性能

查看下“总的声音文件所占的内存”,它表示声音文件一共占据了大概145MB的内存。。。!也就是声音文件自己就占据了大概145MB内存。所以内存小于512MB的手机运行你的游戏将会非常的困难!

好吧,我现在知道了,声音文件占据了太多的内存!但是我该怎么改变这个情况呢?

其实每个问题都是有解决办法的!但是这个问题在于,

· “这是最佳和最优的解决方案么?”

为了得到答案,让我们在我们的例子中继续采取某些措施。

第一步:对声音剪辑的一些设置进行调整

为了对这一步所做的事情有一个更好的理解,你应该首先看下下面的链接,那里面对于声音剪辑的不同设置有一个介绍(正确的理解对于优化来说是非常必要的)

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

检视窗口将如下图这样显示设置:

如何对Unity中的声音进行优化以提高你游戏的性能

可以从上图中看到,我们取消了选中“预加载声音数据”。选中“对安卓平台进行覆盖”以及设置加载类型为“流类型”。

“如果你已经好好阅读了刚才的那个链接,你可能已经知道为什么我要这么做的了:D“

第二步:准备进行安卓版本的构建

其他的构建步骤都跟之前是一样的。

你在手机上打开游戏注意到有什么不同了么?

在我的手机上,游戏加载时间从15秒降低到了2秒。。。!这大概在加载时间上有了5-7倍的提高。。。!

注意

这些数据可能会依据设备不同而有所不同,这主要是取决于中央处理器和内存性能的不同。这里面的数据只是我使用摩托罗拉MOTO G2时候的数据。

让我们检查下分析器。

你在这里面看到一些变化没有?

如何对Unity中的声音进行优化以提高你游戏的性能

总的声音内存从145MB下降到5.MB,而且声音文件的数目并没有变化,我们并没有删掉一些声音文件!!!这在声音内存使用上的优化带来了大概25倍的提升!!

哦,太棒了!!但是,为什么。。。!

你已经知道该怎么办了!现在是来解释下为什么!

我们已经禁止了提前加载声音文件。因此,对于设备而言不会在启动的时候提前加载所有的声音剪辑,因此加载速度大大加快了!声音剪辑只有在它们真正被需要的时候才会被加载到内存中去。

但是,此时出现在你的头脑里面的问题可能是,“一旦我加载和使用了所有的声音剪辑文件,它们会不会始终占据内存而不被释放?”

如果你还记得我曾设置加载类型为流类型,所以它将缓存所有的声音剪辑文件,并且从缓存中开始播放。一旦缓存中的声音剪辑文件被播放完毕,它将被卸载,因此可以释放占据的内存。从而可以优化内存的使用!

你可能还有其他的问题,比如”为什么不对SFX音频文件做同样的事情?”

这是因为它们在游戏中使用的非常频繁,因此哪怕有一点的延迟也会让人感觉不舒服。事实上,我会建议把它们的加载类型改为”在加载的时候进行解压缩”来得到更快的执行速度(并不是对所有的文件都这么做,只对那些播放最频繁的文件做这个事情)。

不过这不是一个大问题,即使你有50 个SFX 声音文件,也不会使用超过10-20MB的内存,而这是完全可以接受的。

下图显示了有大概40个SFX声音剪辑文件的加载类型被设置为”在加载的时候进行解压缩”,一共占据了大概16MB的空间,这是可以接受的!

如何对Unity中的声音进行优化以提高你游戏的性能

这确实是有帮助!声音优化是必要的!

是的,声音优化确实有必要。

如果我们能够合适地优化声音,我们就能留下大量的内存来供游戏进行一些其他重要的处理,因此能够创建一个对于移动端来说更加友好的游戏。与游戏正确的同步也是很重要的。因此,优化和适当的设置是必须的,这只能依赖正确的认识来实现。

原文链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,050评论 25 707
  • 上一章 花钱的女人 望着如遭洗劫的疮瘪钱包,我的欲望在与现实的拉锯中突然萌生出一个强烈的想法:我想回去,我...
    驿阶榭影阅读 220评论 0 0
  • 在 Spring 中注入 List, Set, Map,我们该怎么进行注入呢?,这篇文章接下来讲的 就是这个。 如...
    Draper阅读 678评论 0 0
  • 今天的晨读内容是打造顶级社交圈,和牛人做朋友。看完晨读之后,想起猫叔昨晚开营仪式上说的:“践行是改变的根本”。于是...
    米粥的江湖阅读 302评论 6 9