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

播放音效与随机音调

音效播放已掌握。下一课学 AudioListener。

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

🎯本节学习目标

  • 掌握音效播放
  • 掌握随机音调
  • 掌握多音效管理

🚀课程导读

“哒哒哒”射击声、跳跃声、金币声——音效是游戏“手感”的一半。本课掌握 SFX 播放。

音效播放方式

三种常用方式。

  1. 【方式1 物体自带 AudioSource】跳跃:给 Player 加 AudioSource,跳时 source.Play()。
  2. 【方式2 一次性播放(推荐)】AudioSource.PlayClipAtPoint(clip, position); 在世界某处播一次,自动销毁临时音源。
  3. 【方式3 全局音效管理器】单例 AudioManager 提供 PlaySFX(clip) 方法。
  4. 【一次性播放示例】
  5. public AudioClip jumpSound;
  6. void Jump() { AudioSource.PlayClipAtPoint(jumpSound, transform.position); }
  7. 【注意】PlayClipAtPoint 每次新建临时 AudioSource,频繁调用有性能开销(可用对象池优化,进阶)。
  8. 【事件触发】在动画事件里播脚步(第 135 课)。
  9. 【音效素材】导入 .wav 短音效(第 40 课),Load Type 用 Decompress On Load。
  10. 【音量】PlayClipAtPoint 的第 3 参数可设音量:PlayClipAtPoint(clip, pos, 0.8f)。
💡
短音效用 PlayClipAtPoint 最省事;要精细控制(音量/暂停)用自带 AudioSource。

随机音调

让重复音效不“呆”。

  1. 【问题】同一声效连播十次,听感单调机械。
  2. 【解决】每次播放随机 Pitch(0.9-1.1)与音量(0.9-1.0),模拟真实变化。
  3. 【实现】
  4. public AudioSource sfx;
  5. public AudioClip[] hitSounds; // 多个可选音效
  6. void PlayHit() {
  7. if (hitSounds.Length > 0) sfx.clip = hitSounds[Random.Range(0, hitSounds.Length)];
  8. sfx.pitch = Random.Range(0.9f, 1.1f);
  9. sfx.volume = Random.Range(0.9f, 1f);
  10. sfx.Play();
  11. }
  12. 【Random.Range】随机:int 时含两端;float 时不含上限。
  13. 【多个素材】准备 3-4 个同类型音效随机播放,变化更丰富。
  14. 【应用】脚步(多脚步素材)、攻击、碰撞、拾取。
  15. 【注意】Pitch 改变会改变音高(可用作“越撞越尖”的反馈)。
  16. 【完成】音效不再单调。
随机三件套:随机选素材 + 随机 Pitch + 随机音量。音效“活”起来。

常见错误与排查

错误:音效播不出来?
原因:AudioClip 没赋值、音量 0、或 Listener 缺失
解决:确认 clip 已拖入;音量>0;场景有 AudioListener。

动手练习

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

  • 给跳跃加音效
  • 实现随机音调与随机素材
  • 用 PlayClipAtPoint 播一次性音效

本节小结

音效播放已掌握。下一课学 AudioListener。

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

← 上一课播放背景音乐