首页/ 第 11 章 · 音频系统/ 第 176 课
LESSON 176 · 音频系统

AudioMixer 混音器

AudioMixer 已掌握。下一课做完整音量控制面板。

⏱ 约 14 分钟📊 难度:入门🗂 第 11 章 · 音频系统📍 第 176 / 300 课
课程进度
176 / 300

🎯本节学习目标

  • 理解 AudioMixer 作用
  • 创建音量分组
  • 实现代码控制音量

🚀课程导读

“BGM 和音效分开调音量”“一键静音”——AudioMixer 把声音分门别类管理。本课掌握。

AudioMixer 基础

声音的“调音台”。

  1. 【创建】Project 右键 → Create → Audio Mixer,命名 MainMixer。
  2. 【打开】双击打开 Audio Mixer 窗口(Window → Audio → Audio Mixer)。
  3. 【分组结构】默认有 Master(主组)。在 Groups 面板点 + 创建子组:Music(音乐)、SFX(音效)。
  4. 【音量推子】选中组,右边推子(Volume)控制该组音量(0dB 基准,往下减)。
  5. 【挂接 AudioSource】给背景音乐的 AudioSource 的【Output】槽拖入 Music 组;音效 AudioSource 的 Output 拖入 SFX 组。
  6. 【效果】拖动 Music 组推子只影响背景音乐;SFX 只影响音效。
  7. 【组层级】子组音量受 Master 与父组共同影响。
  8. 【快照 Snapshot】保存当前所有推子状态(如“正常”“静音”“低血”),一键切换(第 177 课)。
  9. 【注意】Mixer 组是“总线”:AudioSource 的 Output 指向哪个组,音量就归谁管。
  10. 【Exposed Parameters】把推子暴露给代码(下一步)。
💡
AudioMixer = 声音“分组调音台”:Music 一组、SFX 一组、Master 总管。

代码控制混音器音量

把推子暴露给脚本。

  1. 【暴露参数】选中要控制的推子(如 Music Volume)→ Inspector 右上角展开 → 把 Volume 参数设为【Exposed】。
  2. 给它命名(如 musicVol)。
  3. 【代码获取】
  4. public AudioMixer mixer;
  5. public void SetMusicVolume(float v) { mixer.SetFloat("musicVol", Mathf.Log10(v) * 20f); }
  6. 【说明】推子单位是 dB(分贝),0-1 线性音量要换算:dB = log10(v) * 20。
  7. 【读取】mixer.GetFloat("musicVol", out float db); 转回 0-1。
  8. 【静音】SetFloat("musicVol", -80f)(接近 -80 = 无声);或切换快照。
  9. 【淡入淡出】用 Mixer 的 TransitionTo(快照过渡)或协程渐变 SetFloat 值。
  10. 【快照切换】mixer.FindSnapshot("Normal"); snap.TransitionTo(0.2f);
  11. 【设置面板】把音乐/音效音量 Slider 接到对应 SetMusicVolume/SetSFXVolume。
  12. 【完成】你的游戏有了专业音量系统。
  13. 【注意】-80dB 约等于无声,但不会完全静音,完全静音用 Mute。
  14. 【推荐】所有 AudioSource 都路由到 Mixer 组,别裸播。
混音器三件套:建组 → Output 路由 → 暴露推子给代码。音量面板两小时搞定。

常见错误与排查

错误:代码 SetFloat 没效果?
原因:推子没暴露(Exposed)
解决:在 Mixer 里把对应推子设为 Exposed,并确认名字一致。

动手练习

课后小任务(做出来才算真的学会)

  • 建 Music/SFX 两组并路由声音
  • 暴露音量推子给代码
  • 实现音乐/音效独立音量控制

本节小结

AudioMixer 已掌握。下一课做完整音量控制面板。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课3D 空间音频与衰减