Unity の Audio Mixer でサウンドをカテゴリ化して管理する方法についてまとめました。
- はじめに
- Audio Groupを作成する
- Audio Source と Audio Group を紐づける
- Audio Groupの音量を調整する
- Audio Group は入れ子にできる
- 関連
- 参考
はじめに
Audio Mixer の Audio Group を使うと、いくつかのサウンドをグループ化して、グループごとにエフェクトなどを適用することができます。
これを使うとサウンドを SE、ボイス、BGM などのカテゴリに分けて、カテゴリごとに音量を管理するといったことが実現できます。
本記事ではこれを行う方法についてまとめます。
なお Audio Mixer の基本的な使い方については以下の記事にまとめていますので、必要に応じて参照してください。
Audio Groupを作成する
まずカテゴリごとの Audio Group を作成します。
Audio Group を作るには、右側のパネルの Groups の Masterを選択した状態で + ボタンを押下します。
以下の例では BGM という名前のグループを作成しています。
同様に Voice、SE という名前のグループを作成しておきます。
Audio Source と Audio Group を紐づける
次に Audio Source と Audio Group を紐づけます。
Audio Source の Inspector から Output プロパティに前節で作成した Audio Group をアサインします。
以下では BGM01 を再生する Audio Source に BGM グループが紐づいています。
Audio Groupの音量を調整する
このようにして Audio Group に紐づけた Audio Source は、Audio Group に設定した音量で再生されます。
グループごとの音量はGUI上から設定することができます。
スクリプトでグループごとの音量を調整するには、まず該当するパラメータを Exposed Parameter に設定します。
今回は各グループの Inspector から Attenuation > Volume を右クリックし、 Expose ‘Volume (of [グループ名])’ to script を選択します。
すると Audio Mixer の右上に Exposed Parameter が一つ追加されます。
これはわかりやすい名前に右クリックメニューから適宜リネームしておきます。
他のグループの Volume に関しても同様に Exposed Parameter にしておきます。
あとはスクリプトから AudioMixer.SetFloat() でこのパラメータに値を設定すれば、グループの音量が変更できます。
以下は一つのグループの音量を Inspector で設定した値に変更するコンポーネントです。
using UnityEngine; using UnityEngine.Audio; public sealed class Example : MonoBehaviour { [SerializeField] private AudioMixer _audioMixer; [SerializeField] private string _volumeParamName; [SerializeField] private float _volume; private float _currentVolume = -1.0f; private void Update() { if (Mathf.Approximately(_currentVolume, _volume)) return; // AudioMixer.SetFloat で Exposed Parameter を設定する _audioMixer.SetFloat(_volumeParamName, _volume); _currentVolume = _volume; } }
このスクリプト適当な GameObject にアタッチして Audio Mixer をアサインし、Volume Param Name に制御したい Exposed Parameter の名前を入力します。
再生後、Volume の値を変えることで該当するグループの音量が変わることを確認できます。
なおこの Volume の単位は元のプロパティそのまま(dB)なので、よりユーザが直感的に操作できる様にするには以下のスレッドで話されているような対応をするべきです。
Audio Group は入れ子にできる
ちなみに Audio Group は入れ子にすることができます。
下図は Voice の子として Player Voice と Enemy Voice を追加した例です。
この様に親子関係を組むと親に適用した変更が子に伝播する様になります。
例えばこの例では、Voice グループの音量を小さくすると Player Voice と Enemy Voice 両方のグループの音量が下がります。