この記事でのバージョン
Unity 6000.4.5f1
はじめに
以前、Audio SourceをBGMやSEなどのグループごとに管理するAudio Mixerを紹介しました。
今回はそのAudio Mixerの設定をまとめて保存し、一括で変えられるSnapshotの紹介です!
これを使えば、ポーズ中に音を抑える、水中でこもった音にする、みたいな事が簡単に行えます。
Snapshot
SnapshotはAudio Mixerウィンドウの+ボタンから作成できます。
(今回は通常時用のNormalと、ポーズ中用のPauseを作成)
![]() |
作成したSnapshotを選択した状態で各設定を変更すると、そのSnapshotの設定として保存されます。
![]() |
ただし、エフェクトの追加と削除は全てのSnapshotで共通になるため、
無効にしたい場合は削除ではなく設定値を変える感じになります。
![]() |
また、ゲーム開始時に設定されているSnapshotは星マークが付いてるもので、
右クリックのStart Snapshotから設定します。
![]() |
そしてSnapshotを切り替える場合は、AudioMixerSnapshotのTransitionToを使います。
//_pauseSnapshotはAudioMixerSnapshot //_pauseSnapshotの状態へ0.5秒かけて切り替える _pauseSnapshot.TransitionTo(0.5f);
さらに、複数のSnapshotを混ぜたい場合はTransitionToSnapshotsを使います。
//混ぜたいSnapshotを配列でまとめる AudioMixerSnapshot[] snapshots = { _normalSnapshot, _pauseSnapshot, }; //それぞれのSnapshotをどれだけ混ぜるか float[] weights = { 0.2f,//Normalを20% 0.8f,//Pauseを80% }; //指定した混ぜ方に0.2秒で切り替える _audioMixer.TransitionToSnapshots(snapshots, weights, 0.2f);
ちなみにFindSnapshotを使う事で、名前からAudioMixerSnapshotを検索する事も可能です。
//Pauseという名前のAudioMixerSnapshotを取得、なければnull AudioMixerSnapshot snapshot = _audioMixer.FindSnapshot("Pause"); if (snapshot == null) { Debug.LogWarning($"PauseというSnapshotが見つかりません。"); }
なお、Time.timeScaleが0の場合はデフォルトの設定ではSnapshotの切り替えが進まないため、
「timeScaleを0にしてポーズする、その時にSnapshotで設定を切り替える」みたいな場合は、
AudioMixerのupdateModeをUnscaledTimeにしておくといいかと思います。
![]() |
//コードで変えたい場合 _audioMixer.updateMode = AudioMixerUpdateMode.UnscaledTime;
前回紹介したSetFloatとSnapshotを組み合わせる場合も注意が必要で、
SetFloatを使うと、その値はSnapshotでは制御されなくなってしまいます。
なので、Snapshotで切り替えたい値は、基本的にはSetFloatで直接変更しない方が無難です。
(もしくはSetFloat操作用とSnapshot操作用のグループを分ける等)




