Unity の Audio Mixer の各種パラメータをスクリプトから制御するExposed Parameterの使い方についてまとめました。
Unity 2020.3.11f1
はじめに
Unity の Audio Mixer では GUI ツールを使って各種パラメータを編集することができます。
これに対して、音量を動的に変更したい場合など、スクリプトからパラメータを制御する必要があるケースがあります。
本記事ではこのやり方について説明します。
なお Audio Mixer の基礎知識については説明しませんが、以下の記事にまとめていますので必要に応じて参照してください。
パラメータを Expose する
パラメータをスクリプトから制御するには、まずそれらを Exposed Parameter として設定する必要があります。
これは各パラメータの右クリックメニューから Expose X to script を選択することで行えます。
次に Audio Mixer ウィンドウ右上の Exposed Parameters ボタンをクリックすると、MyExposedParam として先ほど Expose した値が追加されていることを確認できます。
この MyExposedParam はスクリプトから制御する時に使う名前になります。
この初期値のままではわかりづらいので、これの右クリックメニューから Rename しておきます。
今回は上図の通り BGMVolume にリネームしました。
スクリプトからパラメータを制御する
スクリプトから Exposed Parameter の値を変更するには AudioMixer.SetFloat()
を使います。
以下は BGMVolume を Inspector で設定した値に変更するコンポーネントです。
using UnityEngine; using UnityEngine.Audio; public sealed class Example : MonoBehaviour { [SerializeField] private AudioMixer _audioMixer; [SerializeField] private float _volume; private float _currentVolume = -1.0f; private void Update() { if (Mathf.Approximately(_currentVolume, _volume)) return; // AudioMixer.SetFloat で Exposed Parameter を設定する _audioMixer.SetFloat("BGMVolume", _volume); _currentVolume = _volume; } }
関連する API として、Exposed Parameter の値を取得する AudioMixer.GetFloat()
と、値を初期値に戻す AudioMixer.ClearFloat()
が存在します。
Exposed Parameter と Snapshot
Audio Mixer には、 Audio Group の各パラメータの状態を保存・遷移できる Snapshot という機能があります。
Snapshot による遷移が Exposed Parameter が両方使用された場合、以下のルールに基づいてパラメータが制御されます。
- Exposed Parameter として設定されているパラメータの値が
AudioMixer.SetFloat()
されていない場合、そのパラメータは Snapshot の遷移による影響を受ける - Exposed Parameter の値が
AudioMixer.SetFloat()
されていたら、そのパラメータは Snapshot の遷移による影響を受けない - セットされた Exposed Parameter が
AudioMixer.ClearFloat()
されたら、そのパラメータは Snapshot の遷移による影響を受けるようになるAudioMixer.ClearFloat()
と同時に現在の Snapshot の値が適用される