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

音乐播放器与音量控制面板

音量控制面板完成。下一课综合练习音频系统。

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

🎯本节学习目标

  • 制作音量控制面板
  • 实现静音开关
  • 保存音量设置

🚀课程导读

设置面板里的“音乐/音效音量”是游戏标配。本课用 Mixer + Slider + PlayerPrefs 完整实现。

音量控制面板

滑块控制混音器。

  1. 在设置面板(第 170 课)里加两个 Slider:音乐音量、音效音量,各配一个标题 TMP。
  2. 【滑块设置】Min 0 / Max 1 / Value 1(默认满)。
  3. 【脚本 AudioSettingsUI】
  4. public AudioMixer mixer;
  5. public Slider musicSlider, sfxSlider;
  6. void Start() {
  7. musicSlider.value = PlayerPrefs.GetFloat("MusicVol", 1f);
  8. sfxSlider.value = PlayerPrefs.GetFloat("SFXVol", 1f);
  9. musicSlider.onValueChanged.AddListener(SetMusic);
  10. sfxSlider.onValueChanged.AddListener(SetSFX);
  11. SetMusic(musicSlider.value); SetSFX(sfxSlider.value);
  12. }
  13. void SetMusic(float v) { mixer.SetFloat("musicVol", Mathf.Log10(Mathf.Max(v,0.0001f)) * 20f); PlayerPrefs.SetFloat("MusicVol", v); }
  14. void SetSFX(float v) { mixer.SetFloat("sfxVol", Mathf.Log10(Mathf.Max(v,0.0001f)) * 20f); PlayerPrefs.SetFloat("SFXVol", v); }
  15. 【说明】Mathf.Max 防止 log10(0) 报错(负无穷)。
  16. 【PlayerPrefs】自动保存/读取音量(第 238 课)。
  17. 【注意】推子要先 Exposed(第 176 课)。
💡
音量面板 = Slider + Mixer.SetFloat + PlayerPrefs 三件套。

静音开关与完成

加一个静音按钮。

  1. 在面板加 Toggle“静音”或按钮。
  2. 【静音实现】
  3. public Toggle muteToggle;
  4. public bool muted = false;
  5. void Start() { muteToggle.isOn = PlayerPrefs.GetInt("Muted",0) == 1; muteToggle.onValueChanged.AddListener(SetMute); }
  6. void SetMute(bool m) {
  7. muted = m;
  8. mixer.SetFloat("musicVol", m ? -80f : ToDB(musicSlider.value));
  9. mixer.SetFloat("sfxVol", m ? -80f : ToDB(sfxSlider.value));
  10. PlayerPrefs.SetInt("Muted", m ? 1 : 0);
  11. }
  12. float ToDB(float v) { return Mathf.Log10(Mathf.Max(v,0.0001f)) * 20f; }
  13. 【一键静音】所有组推到 -80dB。
  14. 【测试】拖动滑块音量变化;开关静音全静;重启游戏音量保持。
  15. 【界面反馈】滑块旁显示百分比或当前值。
  16. 【完成】专业音量系统完工!
  17. 【注意】不同场景设置面板复用,用单例 AudioSettingsManager 存全局(第 86 课)。
  18. 【推荐】设置变化即时生效(拖动即响应)。
玩家体验关键:音量设置要“记住”(PlayerPrefs)、要“即时生效”。

常见错误与排查

错误:重启游戏音量被重置?
原因:没写 PlayerPrefs
解决:Start 读取 + 变化时保存 PlayerPrefs,注意 SetFloat/GetFloat 配套。

动手练习

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

  • 做音乐/音效两个音量滑块
  • 实现静音开关
  • 用 PlayerPrefs 保存并恢复音量

本节小结

音量控制面板完成。下一课综合练习音频系统。

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

← 上一课AudioMixer 混音器