【Unity】Audio Mixerで色々なパラメータをスクリプトから制御できるExposed Parameterの使い方

Unity の Audio Mixer の各種パラメータをスクリプトから制御するExposed Parameterの使い方についてまとめました。

Unity 2020.3.11f1

はじめに

Unity の Audio Mixer では GUI ツールを使って各種パラメータを編集することができます。

Audio Mixer

これに対して、音量を動的に変更したい場合など、スクリプトからパラメータを制御する必要があるケースがあります。
本記事ではこのやり方について説明します。

なお Audio Mixer の基礎知識については説明しませんが、以下の記事にまとめていますので必要に応じて参照してください。

light11.hatenadiary.com

パラメータを Expose する

パラメータをスクリプトから制御するには、まずそれらを Exposed Parameter として設定する必要があります。
これは各パラメータの右クリックメニューから Expose X to script を選択することで行えます。

Expose

次に 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 という機能があります。

light11.hatenadiary.com

Snapshot による遷移が Exposed Parameter が両方使用された場合、以下のルールに基づいてパラメータが制御されます。

  • Exposed Parameter として設定されているパラメータの値が AudioMixer.SetFloat() されていない場合、そのパラメータは Snapshot の遷移による影響を受ける
  • Exposed Parameter の値が AudioMixer.SetFloat() されていたら、そのパラメータは Snapshot の遷移による影響を受けない
  • セットされた Exposed Parameter が AudioMixer.ClearFloat() されたら、そのパラメータは Snapshot の遷移による影響を受けるようになる
    • AudioMixer.ClearFloat() と同時に現在の Snapshot の値が適用される

関連

light11.hatenadiary.com

light11.hatenadiary.com