[Unity] オーディオ設定の切り替えを行うAudio Mixer Snapshotを使ってみる

ゲーム内の特定の場所で音の聞こえ方が変化したり、ポーズ画面など「画面が切り替わっていますよー」を表現するのに音も使うらしい。確かに気にしていれば気が付くが、普段はスルーしてしまう音を少しだけ考えます。

今回はこちらの初心者向けビデオの内容をやってみます。

AudioMixer Snapshots(Unity公式チュートリアル動画)

こちらの記事([Unity] オーディオ再生、ダッキング再生、フェードイン再生について覚えた事まとめ)の続きです。

 

 

 

環境

Unity 4.0.0f4

 

やる事

特定の場所にキャラクターが移動したら、音の聞こえ方を変化させます。Audio Mixer Snapshotという機能があるのでそちらを使用します。

具体的には下の画像の中央にある家の近くに移動したら

  • 虫の音の音量を下げる
  • 鳥、セミの音量を上げる

をやってみます。

Snapshots_05

 

デモ

何はともあれ触ってみてください。※音が出ます。注意!

十字キーで家の近くまで移動して音が変化するのを確認できます。

環境音:効果音ラボ

アセット(馬):Animated Horse(アセットストア)

アセット(家):Medieval house(アセットストア)

アセット(木):Terrain Assets(アセットストア)

 

Audio Mixer Snapshotとは?

ミキサーの状態を保存しておくことができる。例えば「室内の時のミキサー状態」と「室外の時のミキサー状態」の設定を作っておける。あとはその設定を切り替えるだけでミキサー状態を変更できる便利な機能です。

ただしスナップショットで保存される設定はボリュームとエフェクトのパラメータだけのようです。ミュートの設定は保存されません。(最初ハマリました)

あとスナップショットで異なるAudio Mixer Groupを設定できません。Audio Mixer Groupを追加するとすべてのスナップショットに追加されます。

 

準備

何はともあれAudioMixerを作成します。さらにAudioMixerGroupを作成します。作成したものはこちら。

Snapshots_06

Toadグループは通常の再生には使用しないことにするので、音量を0にしました。

 

Audio Mixer Snapshotを作成

準備が出来たらAudio Mixer Snapshotを作成します。

Snapshots_04

+ボタン押して名前を付けましょう。

 

作成したSnapshotを選択し、ボリュームの設定を行います。鳥、セミの音はMountain1~3グループで再生するので通常の音量にします。他の音は少しボリュームを下げてみます。

Snapshots_07

これで準備完了です。

 

Audio Mixer Snapshotの切り替えには?

スナップショットを切り替えるには

  • AudioMixerSnapshot.TransitionTo
  • AudioMixer.TransitionToSnapshots

のいずれかのメソッドを呼び出します。

 

スナップショット切り替え用のスクリプトを作成

とりあえずテストなので家にコライダーを付け、トリガーのEnter/Exitでスナップショットを切り替えることにします。

家に付けたスフィアコライダー。IsTrigerをONするの忘れずに。

Snapshots_08

スクリプト : NearHouseSnapshotsControl

using UnityEngine;
using UnityEngine.Audio;
using System.Collections;

public class NearHouseSnapshotsControl : MonoBehaviour {

  public AudioMixer Mixer;
  public AudioMixerSnapshot NearHouseSnapshot;
  public AudioMixerSnapshot DefaultSnapshot;

  private void OnTriggerEnter( Collider other )
  {
    //NearHouseSnapshot.TransitionTo(1.0f);
    AudioMixerSnapshot[] snapshots = new AudioMixerSnapshot[2] { NearHouseSnapshot, DefaultSnapshot };
    float[] weights = new float[2] { 1.0f, 0.0f };
    Mixer.TransitionToSnapshots(snapshots, weights, 2.0f);
  }

  private void OnTriggerExit( Collider other )
  {
    // DefaultSnapshot.TransitionTo(1.0f);
    AudioMixerSnapshot[] snapshots = new AudioMixerSnapshot[2] { NearHouseSnapshot, DefaultSnapshot };
    float[] weights = new float[2] { 0.0f, 1.0f };
    Mixer.TransitionToSnapshots(snapshots, weights, 2.0f);
  }
}

スクリプトにはミキサーとスナップショット2つを指定し、スフィアコライダー内に入った時と離れた時にスナップショットを切り替えています。切り替えというかブレンドしています。

AudioMixerSnapshot.TransitionToで切り替えると、一旦無音になってから音が鳴るので切り替わっている感がすごかったです。

 

まとめ

家の近くに来た時だけ鳥、セミの音を再生なら、3D Soundの設定でいいじゃないかと思いましたがうまい例が作れませんでした。

あとMoutain1~3グループは家から離れた場合に、音が聞こえないだけで再生はされている?ので負荷が掛かっているだろうなー、と使い所がなかなか難しい。スマートに扱える場面の例がまとまっているとみんな使うかも?と、素人的には思ったり。


希木小鳥

Diablo1でハクスラの世界に。今はBorderlands2をプレイ中。ぬるゲーマー。

あわせて読みたい