Unity 6.3 — 音频 Module Reference¶
最后验证: 2026-02-13
Knowledge Gap: Unity 6 Audio Mixer 改进
概述¶
Unity 6.3 音频系统:
- AudioSource:在 GameObjects 上播放声音
- Audio Mixer:混音、效果处理、动态混音
- Spatial Audio:3D 定位声音
基本音频播放¶
AudioSource 组件¶
AudioSource audioSource = GetComponent<AudioSource>();
// ✅ Play
audioSource.Play();
// ✅ Play with delay
audioSource.PlayDelayed(0.5f); // 0.5 seconds
// ✅ Play one-shot (doesn't interrupt current sound)
audioSource.PlayOneShot(clip);
// ✅ Stop
audioSource.Stop();
// ✅ Pause/Resume
audioSource.Pause();
audioSource.UnPause();
在指定位置播放声音(静态方法)¶
// ✅ Quick 3D sound playback (auto-destroys when done)
AudioSource.PlayClipAtPoint(clip, transform.position);
// ✅ With volume
AudioSource.PlayClipAtPoint(clip, transform.position, 0.7f);
3D 空间音频¶
AudioSource 3D 设置¶
AudioSource source = GetComponent<AudioSource>();
// Spatial Blend: 0 = 2D, 1 = 3D
source.spatialBlend = 1.0f; // Fully 3D
// Doppler effect (pitch shift based on velocity)
source.dopplerLevel = 1.0f;
// Distance attenuation
source.minDistance = 1f; // Full volume within this distance
source.maxDistance = 50f; // Inaudible beyond this distance
source.rolloffMode = AudioRolloffMode.Logarithmic; // Natural falloff
音量衰减曲线¶
- Logarithmic:自然、真实(推荐)
- Linear:平稳衰减
- Custom:自定义曲线
Audio Mixer(高级混音)¶
设置 Audio Mixer¶
Assets > Create > Audio Mixer- 打开混音器:
Window > Audio > Audio Mixer - 创建分组:Master > SFX、Music、Dialogue
将 AudioSource 分配到 Mixer 分组¶
using UnityEngine.Audio;
public AudioMixerGroup sfxGroup;
void Start() {
AudioSource source = GetComponent<AudioSource>();
source.outputAudioMixerGroup = sfxGroup; // Route to SFX group
}
从代码控制 Mixer¶
using UnityEngine.Audio;
public AudioMixer audioMixer;
// ✅ Set volume (exposed parameter)
audioMixer.SetFloat("MusicVolume", -10f); // dB (-80 to 0)
// ✅ Get volume
audioMixer.GetFloat("MusicVolume", out float volume);
// Convert linear (0-1) to dB
float volumeDB = Mathf.Log10(volumeLinear) * 20f;
audioMixer.SetFloat("MusicVolume", volumeDB);
暴露 Mixer 参数¶
在 Audio Mixer 窗口中:
- 右键单击参数(例如 Volume)
- 选择“Expose 'Volume' to script”
- 在“Exposed Parameters”选项卡中重命名(例如“MusicVolume”)
音频效果¶
向 Mixer 分组添加效果¶
在 Audio Mixer 中:
- 点击分组(例如 SFX)
- 点击“Add Effect”
- 选择:Reverb、Echo、Low Pass、High Pass、Distortion 等
在对话期间压低音乐(Sidechain)¶
// Setup in Audio Mixer:
// 1. Create "Duck Volume" snapshot
// 2. Lower music volume in that snapshot
// 3. Transition to snapshot when dialogue plays
public AudioMixerSnapshot normalSnapshot;
public AudioMixerSnapshot duckedSnapshot;
public void PlayDialogue(AudioClip clip) {
duckedSnapshot.TransitionTo(0.5f); // 0.5s transition
audioSource.PlayOneShot(clip);
Invoke(nameof(RestoreMusic), clip.length);
}
void RestoreMusic() {
normalSnapshot.TransitionTo(1.0f); // 1s transition back
}
音频性能¶
优化音频加载¶
// Audio Import Settings (Inspector):
// - Load Type:
// - Decompress On Load: Small clips (SFX), loads fully into memory
// - Compressed In Memory: Medium clips, decompressed at runtime (RECOMMENDED)
// - Streaming: Large clips (music), streamed from disk
// Compression Format:
// - PCM: Uncompressed, highest quality, largest size
// - ADPCM: 3.5x compression, good for SFX (RECOMMENDED for SFX)
// - Vorbis/MP3: High compression, good for music (RECOMMENDED for music)
预加载音频¶
// Preload audio clip before playing (avoid stutter)
audioSource.clip.LoadAudioData();
// Check if loaded
if (audioSource.clip.loadState == AudioDataLoadState.Loaded) {
audioSource.Play();
}
音乐系统¶
曲目之间交叉淡入淡出¶
public IEnumerator CrossfadeMusic(AudioSource from, AudioSource to, float duration) {
float elapsed = 0f;
to.Play();
while (elapsed < duration) {
elapsed += Time.deltaTime;
float t = elapsed / duration;
from.volume = Mathf.Lerp(1f, 0f, t);
to.volume = Mathf.Lerp(0f, 1f, t);
yield return null;
}
from.Stop();
}
无缝音乐循环¶
Common Patterns¶
随机音高变化(避免重复)¶
void PlaySoundWithVariation(AudioClip clip) {
AudioSource source = GetComponent<AudioSource>();
source.pitch = Random.Range(0.9f, 1.1f); // ±10% pitch variation
source.PlayOneShot(clip);
}
脚步声(从数组随机选取)¶
public AudioClip[] footstepClips;
void PlayFootstep() {
AudioClip clip = footstepClips[Random.Range(0, footstepClips.Length)];
AudioSource.PlayClipAtPoint(clip, transform.position, 0.5f);
}
检查声音是否正在播放¶
Audio Listener¶
单一侦听器规则¶
- 同一时间只能有一个
AudioListener处于活动状态 - 通常挂在 Main Camera 上
// Disable extra listeners
AudioListener listener = GetComponent<AudioListener>();
listener.enabled = false;
调试¶
音频窗口¶
Window > Audio > Audio Mixer- 可视化电平、测试快照
音频设置¶
Edit > Project Settings > Audio- 全局音量、DSP 缓冲区大小、扬声器模式
参考来源¶
- https://docs.unity3d.com/6000.0/Documentation/Manual/Audio.html
- https://docs.unity3d.com/6000.0/Documentation/Manual/AudioMixer.html
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/Claude-Code-Game-Studios