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

游戏音频编程(数据驱动音效)

数据驱动音效完成。下一课学音频与动画同步。

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

🎯本节学习目标

  • 建立音效库
  • 实现随机组合
  • 用配置驱动

🚀课程导读

“AudioManager.Instance.PlaySFX(“Jump”)”——用“名字”调音效,不再一个一个拖引用。本课数据驱动音效。

音效库(名称→剪辑)

一个字典管所有音效。

  1. 【音效库】集中管理所有音效引用:
  2. public class SoundLibrary : MonoBehaviour {
  3. public static SoundLibrary Instance;
  4. public SoundEntry[] entries; // Inspector 配置
  5. Dictionary<string, AudioClip[]> map;
  6. [System.Serializable] public class SoundEntry { public string name; public AudioClip[] clips; }
  7. void Awake() {
  8. Instance = this;
  9. map = new Dictionary<string, AudioClip[]>();
  10. foreach (var e in entries) map[e.name] = e.clips;
  11. }
  12. public AudioClip Get(string name) {
  13. if (map.ContainsKey(name)) return map[name][Random.Range(0, map[name].Length)];
  14. return null;
  15. }
  16. }
  17. 【说明】clips 数组=同类型多个变体(随机选,第 173 课)。
  18. 【配置】Inspector 里配置 entries:Jump→[跳1,跳2]、Coin→[金币音]。
  19. 【调用】AudioManager 里:
  20. public void PlaySFX(string name) {
  21. AudioClip c = SoundLibrary.Instance.Get(name);
  22. if (c != null) sfxSource.PlayOneShot(c);
  23. }
  24. 【使用】AudioManager.Instance.PlaySFX(“Coin”);
  25. 【好处】加音效不改代码(只加配置)。
  26. 【完成】音效“按名调用”。
  27. 【注意】名字要与配置一致(写错返回 null 静音)。
音效库 = 字典(名→剪辑数组)+ 随机取 + 名字调用。数据驱动标配。

组合音效与进阶

多个音叠加成“氛围”。

  1. 【组合音效】一个动作多音效叠加(爆炸=冲击+碎声+余响):
  2. public void PlayCombo(string[] names, float delay = 0.05f) {
  3. StartCoroutine(PlaySeq(names, delay));
  4. }
  5. IEnumerator PlaySeq(string[] names, float d) {
  6. foreach (var n in names) { PlaySFX(n); yield return new WaitForSeconds(d); }
  7. }
  8. 【分层音量】Mixer 分组控制不同音效音量(第 176 课)。
  9. 【随机音调】SoundLibrary 返回前加随机 pitch(第 173 课)。
  10. 【3D 音效】PlaySFX 支持位置:AudioSource.PlayClipAtPoint(clip, pos, vol)。
  11. 【优先级】重要音效(玩家受击)优先级高:source.priority。
  12. 【淡入淡出】组合音效整体淡入淡出(协程)。
  13. 【脚本事件】音效触发与动画事件/逻辑事件绑定(第 184 课)。
  14. 【测试】Jump/Coin/Explosion 全部按名触发。
  15. 【完成】音频系统“工程化”!
  16. 【注意】PlayOneShot 音量衰减用第 3 参数。
  17. 【推荐】所有音效走 SoundLibrary,别散落引用。
组合音效 = PlayCombo(names) 按序列播。一个“爆炸”=冲击+碎声+余响。

常见错误与排查

错误:按名播放没声音?
原因:名字不匹配或库没配置
解决:核对调用名与配置 name 一致;确认 SoundLibrary 有该条目。

动手练习

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

  • 建立 SoundLibrary 音效库
  • 用名字播放与随机变体
  • 实现组合音效

本节小结

数据驱动音效完成。下一课学音频与动画同步。

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

← 上一课环境音与场景音效设计