Unity

【Unity】AudioMixerでマスター・BGM・SEの音量を管理する方法

この記事について

この記事では、UnityのAudioMixerを使って マスター・BGM・SE音量を個別に調整する方法 を解説します。AudioSource単体での音量調整と違い、AudioMixerを使うとグループごとにまとめて管理できるため、音量調整やエフェクト適用が効率的になります。ここでは、AudioMixerの基本的な仕組みから設定手順、スクリプトによる制御方法までを一通り紹介します。

この記事でわかること

  • AudioMixerの基本と仕組み
  • マスター・BGM・SE用のグループ作成方法
  • スクリプトから音量を変更する方法

AudioSourceとは?

この記事に入る前にAudioSourceについて学んでいない方は以下を参考にしてください。

AudioMixerとは?

AudioMixerは、Unityで複数の音声をグループごとに管理できる機能です。BGMやSEをそれぞれのグループに振り分けておけば、まとめて音量を変更したり、エフェクトをかけたりできます。
特に マスター音量(全体)・BGM音量・SE音量 を独立して管理できる点が便利です。

AudioMixerの設定手順

AudioMixerを作成する

Projectビューで「右クリック」→「Create」→「Audio Mixer」を選択。

グループを作成する

  1. 作成したAudioMixerを左ダブルクリックして開く。
  2. 「Groups」に「Master」があり、右クリックもしくは「+」ボタンから「Create Child Group」BGMSE を追加。

AudioSourceと紐付ける

  1. Hierarchy上の「Audio_BGM」を選択し、InspectorでAudioSourceの「Output」に「BGM」グループを指定。(Audio Resouceは設定しておく)
  2. Hierarchy上の「Audio_SE」を選択し、InspectorでAudioSourceの「Output」に「SE」グループを指定。(Audio Resouceは設定しておく)

音量パラメータを公開する

  1. AudioMixerウィンドウで「BGM」グループの「Volume」を右クリック。
  2. 「Expose to ** script」を選択する。
  3. AudioMixerの「Exposed Parameters」を開き、「BGM_Volume」という名前をつける。
  4. SEも同じように 「SE_Volume」、マスターは「Master_Volume」 とする。

スクリプトで音量を変更する

ここまで出来たらスクリプトで制御してみましょう。本来はSliderを用いて可変にしたいですが、今回はupdateとインスペクターで行っていきます。
スクリプトを作成し、それぞれアタッチしてください。

using UnityEngine;
using UnityEngine.Audio;

public class AudioMixer_Script : MonoBehaviour
{
    [SerializeField] private AudioMixer audioMixer;
    [SerializeField] private AudioSource BGMSource;
    [SerializeField] private AudioSource SESource;
    [SerializeField] private AudioClip SE;

    [SerializeField] private float masterVolume;
    [SerializeField] private float BGMVolume;
    [SerializeField] private float SEVolume;

    public void Update()
    {
        SetMasterVolume(masterVolume);
        SetBGMVolume(BGMVolume);
        SetSEVolume(SEVolume);
    }

    // マスター音量
    public void SetMasterVolume(float volume)
    {
        if (volume <= 0f)
        {
            audioMixer.SetFloat("Master_Volume", -80f); // 無音扱い
        }
        else
        {
            audioMixer.SetFloat("Master_Volume", Mathf.Log10(volume) * 20);
        }
    }

    // BGM音量
    public void SetBGMVolume(float volume)
    {
        if (volume <= 0f)
        {
            audioMixer.SetFloat("BGM_Volume", -80f); // 無音扱い
        }
        else
        {
            audioMixer.SetFloat("BGM_Volume", Mathf.Log10(volume) * 20);
        }
    }

    // SE音量
    public void SetSEVolume(float volume)
    {
        if (volume <= 0f)
        {
            audioMixer.SetFloat("SE_Volume", -80f); // 無音扱い
        }
        else
        {
            audioMixer.SetFloat("SE_Volume", Mathf.Log10(volume) * 20);
        }
    }

    //BGMを開始
    public void BGMStart()
    {
        BGMSource.Play();
    }
    //SEを開始
    public void SEShot()
    {
        SESource.PlayOneShot(SE);
    }
}

実行してインスペクターで「masterVolume」、「BGMVolume」、「SEVolume」を変更するとそれぞれMaster音量、BGM音量、SE音量になっているのがわかるかと思います。

ポイント

  • SetFloat で指定する名前は Exposeしたときのパラメータ名
  • Volumeは0.0~1.0のスライダーを想定し、デシベル(dB)に変換するため「Mathf.Log10(volume) * 20」を使う。
    • 1.0 → 0dB(通常)
    • 0.5 → -6dB
    • 0.0 → -80(無音)

まとめ

  • AudioMixerを使えばマスター・BGM・SEの音量を個別に調整可能。
  • パラメータをExposeしてスクリプトから制御できる。
  • スライダーと連動させることでプレイヤーが自由に音量を調整可能になる。