UPL10-1——音频资源优化
UPL10-1——音频资源优化
前置知识:U1L14——音效系统相关
音频优化的核心理念
按需加载,及时卸载
我们要尽量减少不必要的 AudioClip 在内存中驻留的 时间 和 大小
要尽量最小化活动音频的数量
音频加载方式优化
音频文件导入后非常重要的两个设置参数就是 Load Type (加载类型) 和 Preload Audio Data (预加载音频数据)
音频文件设置参数可见:U1L14-1——音效文件导入
首先来看 Preload Audio Data (预加载音频数据)

勾选后,当 AudioClip 资源被加载时(场景加载、Resources.Load、AB包、Addressables 加载等),立即加载音频数据
取消勾选,音频数据延迟加载,直到第一次需要播放时才加载
再来看 Load Type (加载类型) 中的三种模式:

-
Decompress On Load(加载时解压)
-
工作机制:
- 加载时:音频文件完全加载到内存,并立即解压成原始的 PCM 格式
- 播放时:直接从内存中读取已解压的 PCM 数据,无需任何额外处理
-
内存与 CPU 特点:
- 内存占用:最高(存储完整的解压后数据)
- CPU 占用:最低(播放时零解压开销)
- 加载延迟:高(需要完成解压才能使用)
-
适用场景:
短小、频繁播放的音效(枪声、按钮点击、跳跃声等)
需要极低播放延迟和零 CPU 开销的场景
推荐配合 Preload Audio Data (预加载音频数据)
- 适用:短小高频音效
- 效果:场景加载时立即解压,播放时零延迟
-
-
Compressed In Memory(在内存中压缩)
-
工作机制:
- 加载时:压缩的音频数据(.ogg、.mp3等)加载到内存,保持压缩状态
- 播放时:实时解压小块的压缩数据供播放使用
-
内存与 CPU 特点:
- 内存占用:中等(存储压缩数据)
- CPU占用:高(播放时持续解压)
- 加载延迟:中等(只需加载压缩数据)
-
适用场景:
中等长度音频(角色语音、环境音效,5 秒 ~ 2 分钟)
需要快速启动但内存敏感的场景
配合 Preload Audio Data (预加载音频数据)
- 适用:重要的语音/音效,需要快速首次播放
- 效果:立即加载压缩数据,首次播放无延迟
如果不开启,会延迟加载,节省初始内存,首次播放有轻微延迟
-
-
Streaming(流式加载)
-
工作机制:
- 加载时:只加载音频文件的头部信息
- 播放时:从磁盘实时读取小块数据到固定大小的环形缓冲区
-
内存与 CPU 特点:
- 内存占用:最低(固定大小缓冲区,通常256KB左右)
- CPU占用:最高(持续磁盘 I/O + 解压)
- 加载延迟:低(几乎立即可以开始播放)
-
适用场景:
长音频文件(背景音乐、过场动画音频,> 2 分钟)
内存极度敏感的应用
推荐不配合 Preload Audio Data (预加载音频数据)
- 适用:所有流式音频(BGM 等)
- 效果:避免无意义的预加载,按需流式读取
-
总结:根据音频长度来判断使用那种加载方式和是否开启预加载
-
短音频 (< 5 秒)
-
高频播放:Decompress On Load(加载时解压)+ 勾选预加载 (Decompress On Load)
比如游戏中的枪声、脚步声、换弹声、UI 音效等
-
低频播放: Compressed In Memory(在内存中压缩)+ 不勾选预加载 (Decompress On Load)
比如角色受伤语音等
-
-
中等音频 (5 秒 - 2 分钟)
-
需要快速启动:Compressed In Memory(在内存中压缩) + 勾选预加载 (Decompress On Load)
比如重要 NPC 对话语音等
-
内存敏感不需要快速启动:Compressed In Memory(在内存中压缩) + 不勾选预加载 (Decompress On Load)
比如风声、雨声等环境声
-
-
长音频 (> 2 分钟)
-
Streaming(流式加载) + 不勾选预加载 (Decompress On Load)
比如背景音乐
-
- 频繁播放:优先考虑 CPU 开销,选择 Decompress On Load
- 内存敏感:优先考虑 Compressed In Memory 或 Streaming
音频格式与设置优化
音效格式:不建议直接在项目中使用 .wav、.aiff 等音频格式,这些格式的内存占用很大
推荐使用:
-
mp3:适用于有较长静音或复杂音轨的音乐(如背景音乐),压缩率高 -
ogg:通常比mp3有更好的压缩比和质量,是 BGM 和长音效的绝佳选择 -
aac:在 IOS 平台上有硬件解码支持,效率很高
等格式
对于移动平台来说,IOS 优先使用 mp3 或 aac 格式,Android 优先使用 ogg 格式
设置优化
-
降低质量
对于背景音乐或非核心音效,适当降低音频设置中的质量选项可以显著减少文件大小和内存占用,而人耳几乎听不出太大区别
- 高质量(0.8-1.0):用于音乐、重要音效
- 中等质量(0.5-0.7):用于环境音、次要音效
- 低质量(0.3-0.5):用于测试阶段或内存极度紧张时
-
降低采样率 (制作音频文件时设置)
语音频率范围远小于音乐,对于语音文件,将采样率从 44.1kHz 降低到 22.05kHz 甚至 11 kHz,
文件大小和内存占用会减半或更多,同时完全满足清晰度要求 -
勾选 Load In Background(后台加载)
勾选后,音频加载不会阻塞主线程,对于大文件,强烈建议勾选,避免游戏卡顿
-
选择适合对应平台的 Compression Format(压缩格式)
- Andorid 和 PC 推荐勾选 Vorbis(沃比斯)
- IOS 推荐勾选 MPEG(即MP3)
-
对于不需要多声道效果的音效,建议勾选 Force To Mono(多声道转单声道)
这样可以有效减少内存占用
生命周期管理
-
推荐使用 AB 包或者
Addressables管理音频文件相对
Resources加载来说可以更精准的控制音效的加载和卸载,避免内存泄漏 -
对于频繁播放和停止的同一音效,为了避免反复实例化和销毁音频组件
我们可以使用对象池来管理
AudioSource组件,避免频繁产生垃圾,触发 GC -
可以在音效管理中加入并发数量限制
即当前全局音效播放数超过了上限后,限制活动源
-
场景切换时要注意确保清理未使用的音频资源
-
可以结合性能检测窗口 Profiler 检测音频模块的问题
