Unity の Audio Mixer で、Audio Mixer の状態を保存して切り替える Snapshot 機能の使い方についてまとめます。
- Snapshot 機能とは?
- Snapshot を作成する
- 再生時の Snapshot を設定する
- Snapshot を切り替える
- Snapshot をブレンドする
- 遷移時の補間方法を設定する
- 関連
- 参考
Unity 2020.3.11f1
Snapshot 機能とは?
Audio Mixer では、グループの音量(Attenuation)や各種エフェクトのパラメータなど、現在の設定値を Snapshot として保存できます。
保存した Snapshot はスクリプトによって切り替えたりブレンドしたりできます。
本記事ではこの Snapshot 機能についてまとめます。
Audio Mixer の基礎知識については割愛しますが、以下の記事にまとめていますので必要に応じて参照してください。
Snapshot を作成する
Audio Mixerには、デフォルトでは1つの Snapshot が存在しており、変更したパラメータなどの状態はこれに保存されます。
Snapshot を新しく作るには、 Snapshots の右側の + ボタンを押下します。
作成した Snapshot をクリックするとアクティブな Snapshot が切り替わり、それ以降編集したパラメータはその Snapshot に保存されます。
新しい Snapshot のパラメータを適当に変更してから Snapshot を切り替えると、状態が切り替わることを確認できます。
再生時の Snapshot を設定する
前節のように Snapshot は複数作成できるため、ゲームの再生を開始した時にそのうちのどれを使うかを設定する必要があります。
これは Snapshot を右クリックして開いたメニューの Set as start Snapshot から設定できます。
start Snapshot として設定された Snapshot の右側には★が表示されます。
Snapshot を切り替える
Snapshot を切り替えるにはAudioMixerSnapshot.TransitionTo()
を使用します。
using UnityEngine; using UnityEngine.Audio; public class Example : MonoBehaviour { [SerializeField] private float _transitionTime = 1.0f; [SerializeField] private AudioMixerSnapshot _snapshot1; [SerializeField] private AudioMixerSnapshot _snapshot2; private void Update() { if (Input.GetKeyDown(KeyCode.A)) _snapshot1.TransitionTo(_transitionTime); if (Input.GetKeyDown(KeyCode.B)) _snapshot2.TransitionTo(_transitionTime); } }
なお上記では AudioMixerSnapshot
を SerializeField
で設定していますが、以下の様に AudioMixer
から取得することもできます。
AudioMixer mixer;
mixer.FindSnapshot("SnapshotName");
Snapshot をブレンドする
AudioMixer.TransitionToSnapshots
を使用すると、指定した Snapshots を指定した重みでブレンドした状態に遷移することができます。
以下は複数の Snapshot を均等な重みでブレンドしている例です。
using UnityEngine; using UnityEngine.Audio; public class Example : MonoBehaviour { [SerializeField] private float _transitionTime = 1.0f; [SerializeField] private AudioMixerSnapshot[] _snapshots; [SerializeField] private AudioMixer _mixer; private void Update() { if (Input.GetKeyDown(KeyCode.A)) { var weights = new float[_snapshots.Length]; for (var i = 0; i < weights.Length; i++) weights[i] = 1.0f; _mixer.TransitionToSnapshots(_snapshots, weights, _transitionTime); } } }
遷移時の補間方法を設定する
Snapshot 間を遷移する時には、エフェクトなどの各パラメータはデフォルトでは線形補間されます。
各パラメータの右クリックメニューから、この補間方法を変更することができます。