使用 AuidoMixer 管理聲音音量

Unity 的 AuidoMixer 可以讓開發者將遊戲音樂,音效分組,方便管理。
以下說明如何設定。

  1. 在 Unity 編輯器中, 找到 Create -> Audio -> AudioMixer , 建立一個 AudioMixer
  2. 建立 AudioMixer 之後,可以更改為自己需要的名稱,例如 MainAudioMixer
  3. 在剛剛建立的 AudioMixer ,使用滑鼠左鍵點擊 Groups 區域旁邊的 + , 建立兩個分組並命名為 MusicSoundEffect
  4. 找到有 AudioSource 的物件,將Group的欄位設定為對應的 Group ,將 AudioSource 分配到對應的分組,例如下圖將 Sound 的 Group 設為 SoundEffect 而 BackgroundMusic 的 Group 設為 Music
  5. 接著到 MainAudioMixer 物件,把它展開,會看到建立的 Group ,選擇 Music ,在 Inspector 上面,找到 Volume ,對著 Volume 按下滑鼠右鍵,選 Expose Volume (of Music) to script 。 SoundEffect 也是同樣的操作
  6. 在回到 MainAudioMixer , 找到右上角的 Exposed Parameters 把它展開,並把它們命名為自己想要的名稱,注意這邊的名稱會在腳本中使用,腳本想要透過 audioMixer.SetFloat 變更數值的話,傳入名稱要一致才行。
  7. 使用範例程式碼。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    using 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:

評論