音频系统

🎧 音效系统

1. 常用音频格式

  • wav(最常用)
  • mp3(最常用)
  • ogg(最常用)
  • aiff(不常用)

2. 音频文件参数(Importer Settings)

通用设置

  • Force To Mono:多声道转单声道
  • Normalize:强制为单声道时,混合过程中被标准化
  • Load In Background:后台加载,不阻塞主线程(音频较大出现卡顿时勾选)
  • Ambisonic:立体混响声,适合 360° 视频和 XR 应用;音频文件包含立体混响编码时启用

LoadType:加载类型

  • Decompress On Load

    • 不压缩形式存内存
    • 加载快,占内存高
    • 适用小音效
  • Compress In Memory

    • 压缩形式存内存
    • 加载慢,占内存低
    • 适用于较大音效
  • Streaming

    • 流式存在
    • 使用时解码
    • 内存占用最小,CPU 消耗较高
    • 性能换内存

其他参数

  • Preload Audio Data(默认勾选)
    • 勾选:进入场景就加载
    • 不勾选:第一次使用时才加载

Compression Format:压缩方式

  • PCM:最高质量存储,背景音乐推荐使用
  • Vorbis:比 PCM 更小,可调质量
  • ADPCM:压缩最大,带噪音,适合短暂打击声

Quality(音频质量)

  • 控制压缩量
  • 不适用于 PCM / ADPCM / HEVAG

Sample Rate Setting(采样率设置)

  • Preserve Sample Rate:保持采样率不变(默认)
  • Optimize Sample Rate:根据内容自动优化
  • Override Sample Rate:手动指定采样率,可用于丢弃高频内容

3. 音频源组件 AudioSource 参数

基础参数

  • AudioClip:音频文件
  • Output:输出目标(默认 AudioListener,可改为 Mixer)
  • Mute:静音
  • Bypass Effect:绕过滤波器
  • Bypass Listener Effects:绕过监听器效果
  • Bypass Reverb Zones:绕过混响区
  • Play On Awake:对象创建时播放(除背景音乐外一般不勾)
  • Loop:循环播放(背景音乐常用)
  • Priority:优先级

播放属性

  • Volume:音量
  • Pitch:音高(可用于加速/减速)
  • Stereo Pan:左右声道(2D)
  • Spatial Blend:2D/3D 声音混合
  • Reverb Zone Mix:混响区混合量

3D Sound Settings(3D 声音设置)

  • Doppler Level:多普勒等级
  • Spread:扩散角度(3D 或多声道)

Volume Rolloff(声音衰减)

  • Logarithmic Rolloff:近大远小,衰减快
  • Linear Rolloff:线性衰减
  • Custom Rolloff:根据曲线图自定义变化

Min / Max Distance

  • Min Distance:此距离内保持最大音量
  • Max Distance:超过后开始衰减,到范围外听不到

4. 音频监听组件 AudioListener

  • 摄像机创建时自动挂载
  • 用于监听所有音效
  • 第一视角使用哪个相机就启用哪个
  • 不能同时启用多个 AudioListener

5. 代码控制音频源

5.1 播放、延迟播放、停止、暂停、取消暂停

通过 AudioSource 可以使用代码精确控制音效的播放状态:

    audioSource.Play();             // 立即播放
    audioSource.PlayDelayed(5f);    // 延迟 5 秒播放
    audioSource.Stop();             // 停止播放(进度归零)
    audioSource.Pause();            // 暂停播放(保留播放进度)
    audioSource.UnPause();          // 从暂停的位置继续播放(和使用Play效果相同)

5.2 检测音频是否播放完毕

如果你需要在音效播放结束后执行某个逻辑,可以通过监听 isPlaying

if (audioSource.isPlaying)
{
    Debug.Log("播放中");
}
else
{
    Debug.Log("播放结束");
}

isPlaying == false 意味着音频播放结束没有在播放

5.3 动态生成或切换音效

除了在 Inspector 设置音频,也可以在代码中动态控制音效来源:

① 在当前对象上直接控制 AudioSource

(适用于本对象专用音效)

audioSource = GetComponent<AudioSource>();
audioSource.clip = clip;
audioSource.Play();

② 实例化一个带 AudioSource 的 prefab

(较少使用)

Instantiate(obj); // obj 内含 AudioSource

③ 使用一个 AudioSource 播放多种不同音效

(常用方式)

AudioSource aus = gameObject.AddComponent<AudioSource>();
aus.clip = clip;
aus.Play();
  • 一个 GameObject 可以挂多个 AudioSource,但必须自行管理,否则你无法知道哪个源正在播放哪个音效,可以使用List记入。
posted @ 2025-12-08 13:20  高山仰止666  阅读(2)  评论(0)    收藏  举报