obsidian/笔记文件/2.笔记/Unity音频资源优化.md
2025-03-26 00:02:56 +08:00

3.4 KiB
Raw Permalink Blame History

#unity/日常积累

一个2MB的音频文件在内存中却变成了20+MB

!Pasted image 20231117153942.png

!Pasted image 20231117153946.png

研究:

音频加载有多种模式: 造成这种现象是因为选择了Decompress On Load这种模式。

!Pasted image 20231117154003.png

为什么会造成这种现象呢这就要学习一下unity的音频的导入选项了。

一、LoadType

1. Streaming:流

动态解码声音。此方法使用==最小量的内存==来缓冲从磁盘逐渐读取并在运行中解码的压缩数据。请注意解压缩发生在分析器窗口的音频面板的“Streaming CPU”部分中可监视其CPU使用率的单独流式线程上。注意即使没有加载任何音频数据流式片段也会有大约200KB的过载。

2. Decompress On Load:加载时解压缩(适用于小音效)

音频文件一经加载就会被解压缩。对较小的压缩声音使用此选项可避免即时解压缩的性能开销。==请注意在加载时解压缩Vorbis编码的声音比使用它压缩大约多十倍的内存对于ADPCM编码大约是3.5倍)==,所以不要将此选项用于大文件。

3. Compressed In Memory:压缩在内存中

保持声音在存储器中压缩并在播放时解压缩。这个选项有一个小的性能开销尤其是对于Ogg / Vorbis压缩文件所以==只能用于较大的文件==因为在加载时解压缩会使用大量的内存。解压缩在混音器线程上发生并可在Profiler窗口的音频面板中的“DSP CPU”部分进行监视。

4. Preload Audio Data:预加载音频数据

如果启用音频剪辑将在场景加载时预先加载。默认情况下这反映了在场景开始播放时所有音频剪辑已完成加载的标准Unity行为。如果未设置该标志音频数据将要么被上加载的第一个的AudioSource.Play/ 的AudioSource .PlayOneShot或者它可以通过加载的AudioSource.LoadAudioData并通过再次卸载的AudioSource .UnloadAudioData

总结小文件音频建议使用预加载大文件音频建议使用将Load Type修改为 Streaming ,这样在播放完毕后会自动释放对应文件。

二、Compression Format:压缩格式

  • PCM :提供高品质但牺牲文件大小最适合使用在很短的音效上。
  • ADPCM 这种格式适用于大量音效上如脚步爆破和武器它比PCM小3.5倍但CPU使用率远低于Vorbis/MP3
  • Vorbis/MP3 比PCM小但是品质比PCM低比ADPCM消耗更多CPU。但大多数情况下我们还是应该使用这种格式这个选择还多了个Quality可以调节质量改变文件大小 Quality测试1和100对内存影响并不大

三、音道

强制音效用单声道
只有少数的手机装置真的有立体声喇叭,而将音效强制设定为单声道能让内存的消耗减半。就算游戏会输出部份的立体声,有些单声道像是 UI 音效还是可以开启这个选项。

详细策略见下面这篇文章,具体的工具实现已上传github

!Pasted image 20231117154031.png

!Pasted image 20231117154034.png

!Pasted image 20231117154126.png

!Pasted image 20231117154142.png

!Pasted image 20231117154153.png