14.1 Audio Source 组件
AudioSource 是音频播放的核心组件。
核心属性
| 属性 |
说明 |
| AudioClip |
音频文件(WAV / MP3 / OGG / AAC) |
| Output |
输出到的 Audio Mixer Group |
| Mute |
静音 |
| Play On Awake |
启动时自动播放 |
| Loop |
循环播放 |
| Volume |
音量(0~1) |
| Pitch |
音调(-3~3,1 为原速) |
| Stereo Pan |
立体声声像(-1 左, 0 中, 1 右) |
| Spatial Blend |
2D vs 3D 混合(0=2D, 1=3D) |
14.2 播放音频
基础播放
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class AudioManager : MonoBehaviour { [SerializeField] private AudioSource bgmSource; [SerializeField] private AudioSource sfxSource; [SerializeField] private AudioClip jumpClip; [SerializeField] private AudioClip hitClip;
void Start() { bgmSource.loop = true; bgmSource.Play(); }
void Update() { if (Input.GetKeyDown(KeyCode.Space)) { sfxSource.PlayOneShot(jumpClip); }
if (Input.GetKeyDown(KeyCode.H)) { sfxSource.PlayOneShot(hitClip, volumeScale: 0.8f); } } }
|
音频播放 API
1 2 3 4 5 6 7 8 9 10 11 12 13
| audioSource.Play(); audioSource.PlayDelayed(1f); audioSource.PlayOneShot(clip); audioSource.PlayScheduled(dspTime);
audioSource.Pause(); audioSource.UnPause(); audioSource.Stop();
bool isPlaying = audioSource.isPlaying;
|
14.3 2D vs 3D 音频
Spatial Blend 控制
1 2
| audioSource.spatialBlend = 0f; audioSource.spatialBlend = 1f;
|
3D 音频设置
| 属性 |
说明 |
| Doppler Level |
多普勒效应(0 关闭) |
| Spread |
扩散角度(度) |
| Min Distance |
最小距离(音量衰减起点) |
| Max Distance |
最大距离(音量衰减终点) |
14.4 Audio Mixer
Audio Mixer 提供专业的混音和效果处理。
创建 Mixer
Project 面板 → Create → Audio Mixer
常用功能
- Group 分组:BGM、SFX、Voice 等分组管理
- Volume 控制:通过暴露参数(Exposed Parameters)用脚本控制
- 效果器:回声(Echo)、混响(Reverb)、低通滤波(Lowpass)等
- 快照(Snapshots):保存不同效果配置,可动态切换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| using UnityEngine.Audio;
public class MixerController : MonoBehaviour { [SerializeField] private AudioMixer audioMixer;
public void SetMasterVolume(float volume) { audioMixer.SetFloat("MasterVolume", Mathf.Log10(volume) * 20); }
public void SetBGMVolume(float volume) { audioMixer.SetFloat("BGMVolume", Mathf.Log10(volume) * 20); }
public void SwitchSnapshot(AudioMixerSnapshot snapshot) { snapshot.TransitionTo(0.5f); } }
|
AudioMixer 的音量单位是分贝(dB),所以需要将 0~1 的线性值转换为 dB:dB = Mathf.Log10(volume) * 20。
14.5 音频管理最佳实践
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class GameAudioManager : MonoBehaviour { public static GameAudioManager Instance { get; private set; }
[SerializeField] private AudioSource bgmSource; [SerializeField] private AudioSource sfxSource;
void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } }
public void PlayBGM(AudioClip clip) { bgmSource.clip = clip; bgmSource.Play(); }
public void PlaySFX(AudioClip clip, float volume = 1f) { sfxSource.PlayOneShot(clip, volume); }
public void PlaySFXAtPoint(AudioClip clip, Vector3 position, float volume = 1f) { AudioSource.PlayClipAtPoint(clip, position, volume); } }
|
14.6 本章小结
- AudioSource 播放音频,支持 2D/3D 模式
PlayOneShot 适合一次性的叠加音效
- Spatial Blend 控制 2D 与 3D 的混合比例
- Audio Mixer 实现专业混音和效果控制
- 单例模式管理全局音频
练习题
- 为角色的跳跃和落地添加音效
- 使用 Audio Mixer 分别控制 BGM 和 SFX 音量
- 实现一个 3D 音效:物体离玩家越近声音越大
- 使用 Mixer Snapshot 实现”进入菜单时 BGM 变低沉”的效果