使用 AuidoMixer 管理聲音音量
Unity 的 AuidoMixer 可以讓開發者將遊戲音樂,音效分組,方便管理。
以下說明如何設定。
- 在 Unity 編輯器中, 找到
Create
->Audio
->AudioMixer
, 建立一個 AudioMixer - 建立 AudioMixer 之後,可以更改為自己需要的名稱,例如
MainAudioMixer
- 在剛剛建立的 AudioMixer ,使用滑鼠左鍵點擊 Groups 區域旁邊的
+
, 建立兩個分組並命名為Music
和SoundEffect
- 找到有 AudioSource 的物件,將Group的欄位設定為對應的 Group ,將 AudioSource 分配到對應的分組,例如下圖將 Sound 的 Group 設為
SoundEffect
而 BackgroundMusic 的 Group 設為Music
- 接著到
MainAudioMixer
物件,把它展開,會看到建立的 Group ,選擇 Music ,在 Inspector 上面,找到 Volume ,對著 Volume 按下滑鼠右鍵,選Expose Volume (of Music) to script
。 SoundEffect 也是同樣的操作 - 在回到 MainAudioMixer , 找到右上角的 Exposed Parameters 把它展開,並把它們命名為自己想要的名稱,注意這邊的名稱會在腳本中使用,腳本想要透過
audioMixer.SetFloat
變更數值的話,傳入名稱要一致才行。 - 使用範例程式碼。注意,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19using UnityEngine;
using UnityEngine.UI;
public class SettingMenu : MonoBehaviour
{
public AudioMixer audioMixer;
public void SetSoundVolume(float value)
{
float dB = value > 0 ? Mathf.Log10(value) * 20 : -80f;
audioMixer.SetFloat("sound", dB);
}
public void SetMusicVolume()
{
float dB = value > 0 ? Mathf.Log10(value) * 20 : -80f;
audioMixer.SetFloat("music", dB);
}
}audioMixer.SetFloat
接受的是分貝值範圍(20f
為最大,-80f
為最小),如果希望使用範圍為 0 ~ 1 的線性值,可透過Mathf.Log10
進行轉換。float dB = value > 0 ? Mathf.Log10(value) * 20 : -80f;
- 當 value 小於 0 或等於 0 時,直接返回 -80f 表示靜音
- 當 value 大於 0 時,計算 Mathf.Log10(value) * 20 ,
- 當 value 等於 1 時, Log10(1) 會返回 0 , 剛好是 audioMixer 的原來音量
Reference: