今回のテーマ
- AudioMixer アセットを使って以下のような音響効果を得る
- 洞窟の中に入ると音が響くようになる
- ボイスなどの効果音が鳴っている間は BGM 等の音量を下げる
学習環境のセットアップ
Unity 2019.3 以降を想定しています。
- Package Manager から Cinemachine, ProBuilder をインポートする
- 既にインポートされている場合はインポートしなくてよい
- アセットパッケージ LearnAudioMixer.unitypackage をダウンロード・インポートする
解説動画
どんなことができるか見てみましょう
学習環境がセットアップできたら、次の手順で AudioMixer でどんなことができるのか見てみましょう。
- シーン "Assets/_LearnAudioMixer/Cave with AudioMixer" を実行する
- 左クリック、左クリック、Space を押して効果音を鳴らす
- 前進して洞窟に入る
- 洞窟内で左右クリック、Space を押して効果音を鳴らす
- 効果音にエコーがかかっていることがわかるでしょう
- 洞窟内に入るとライトが点灯するので、それで「洞窟内か外か」を判断できます
- 洞窟の外に出て、左右クリック、Space を押して効果音を鳴らす
- 効果音が鳴っている間、BGM と環境音(風の音)消えていることがわかるでしょう
なお、シーン "Cave" は同じ構成で AudioMixer を使っていません。シーン "Cave" を元に AudioMixer を使って音響効果を追加し、シーン "Cave with AudioMixer" のような演出ができるようになるのが目標です。
どんなことができるのか
AudioMixer を使うと、以下のようなことができます。
- エフェクトをかけることができる
- エフェクトはトラック (Audio Mixer Group) ごとにかけることができる
- エフェクトの種類はリバーブ・コーラス・イコライザーなどがある(エフェクト一覧はマニュアルの Audio Effect 以下にある)
- トラックから別のトラックに信号を送ることができる (send/receive)
- トラックの音量が一定以上を超えたら、別のトラック(の receive)に信号を送ることができる (send)
- 別のトラックで信号を受け取ったら (receive)、エフェクトをかけることができる
- 最も簡単な使い方は、ボイスのトラックで音が鳴ったら、BGM のトラックに send し、BGM のトラックの Duck Volume(音量を下げる)エフェクトで receive して「ボイスが鳴っている間は BGM 音量を下げる」といったものです
- 各トラック(Audio Mixer Group) ごとのエフェクト設定や音量バランスをプリセットとして保存し (Snapshot)、切り替えることができる
- もちろん C# スクリプト コンポーネントから切り替えることができます
だいたい以下のようなイメージです。
やってみましょう
シーン "Cave" の構成を理解する
Cave オブジェクトの子オブジェクトの "Trigger" オブジェクトの設定を見ると、トリガーがアタッチされていて、Tag が "Cave" になっている。これは、このトリガーに接触している時は「洞窟内にいる」と判定している。その判定は Player オブジェクトにアタッチされた Cave Controller コンポーネントで行っている。
次に、Hierachy ウインドウの検索窓に、"t:AudioSource" と入力する。すると、以下のようにオブジェクトが抽出される。
これは AudioSource コンポーネントがアタッチされているオブジェクトが抽出されている。それぞれのオブジェクト(にアタッチされた AudioSource コンポーネント)の役割は以下の通りです。
- Ambient: 環境音(風の音)を再生する
- BGM: BGM を再生する
- PlayerSFX: 射撃音、ジャンプ、ボイスを再生する
AudioMixer アセットを作る
まずは、新しく AudioMixer アセットを作り、基本的な設定をしていきます。
- Project ウインドウで AudioMixer アセットを新しく作り、MyAudioMixer に名前を変える
- AudioMixer ウインドウを表示して、MyAudioMixer に Groupを追加する
AudioSource の Output を設定する
以下のようにして、Audio Source と Audio Mixer Group を関連付けていきます。
- オブジェクト BGM の Audio Source コンポーネントの設定 Output に、Audio Mixer アセットの BGM Group をアサインする
- オブジェクト Ambient の Audio Source コンポーネントの設定 Output に、Audio Mixer アセットの Ambient Group をアサインする
- オブジェクト SFX の Audio Source コンポーネントの設定 Output に、Audio Mixer アセットの SFX Group をアサインする
これで、各 Audio Source の出力を Audio Mixer へ入力することができた。
エフェクト(リバーブ)を設定する
以下のようにして、特定の Group のみにエフェクトをかけていきます。
- Audio Mixer ウインドウで、SFX Group の下にある "Add..." をクリックして SFX Reverb エフェクトを追加する
- Reverb とは風呂場のように音を響かせるエフェクトです
- SFX とは Sound Effect の略です
- SFX Reverb を選択して、Inspector から Room を 0.00 mB(一番右)に設定する
- シーンを実行し、左右クリックとスペースを押して効果音を出してみる
これで、効果音にリバーブがかかっていれば正しく作業できています。
設定を切り替える (Snapshot)
以下のようにして、エフェクトの設定を切り替えられるようにしていきます。
- Audio Mixer ウインドウで Snapshots の右にある + をクリックして、新しく Snapshot を作る
- 新しくできた Snapshot を Cave に, デフォルト(★マークがついたもの)の Snapshot を Field に名前を変更する
- Snapshot "Field" を選択した状態で SFX Reverb エフェクトを選択し、Inspector から Room を -10000.00(一番左)に設定する
- これにより、Field ではリバーブがかからなくなる
- シーンを実行し、効果音を出してリバーブがかからないことを確認する
- 実行中に Audio Mixer ウインドウの "Edit in Play Mode" ボタンをクリックする
- これで Audio Mixer を操作できるようになる
- Snapshots を Cave に切り替えて、効果音にリバーブがかかることを確認する
これで「異なるエフェクト設定」を別の Snapshot に設定しました。洞窟の外にいる時は "Field" Snapshot に、洞窟の中に入る時は "Cave" Snapshot に切り替えるようにすればよいわけです。
実行中に Snapshot を切り替える
実行中に C# スクリプト コンポーネントから Snapshot を切り替えるように設定していきます。
- Player オブジェクトの Cave Controller コンポーネントの設定 "Audio Settings In Field", "Audio Settings In Cave" にそれぞれ MyAudioMixer アセットの "Field", "Cave" Snapshot をアサインする
Cave Controller コンポーネントは、「"Cave" という Tag の付いた Trigger に接触したら "Audio Settings In Cave" に Snapshot を切り替える。"Cave" という Tag の付いた Trigger から出たら "Audio Settings In Field" に Snapshot を切り替える」という機能を持っています。
詳しいことは Cave Controller スクリプト コンポーネントのコードとコメントを参照してください。
これで、「洞窟内では効果音にリバーブがかかる。洞窟の外ではリバーブがかからない」という設定が完了しました。シーンを実行して期待通りの挙動になっていることを確認しましょう。
効果音が鳴っている間は BGM/環境音を下げる
BGM や環境音が再生されている状態で、そのままボイスなどの効果音を再生すると音が重なってうるさく感じます。なので、効果音が鳴っている間は BGM と環境音の音量を下げるようにしていきます。音量を下げる "Duck Volume" エフェクトと "Send" を使います。
- MyAudioMixer の "Field" Snapshot を選択しておく
- BGM グループと Ambient グループに Duck Volume エフェクトを追加する
- 追加した2つの Duck Volume エフェクトに対して、Threshold を -50.00 db に設定する
- Duck Volume エフェクトは、Send を受け取って初めて有効になるため、次は Send の設定をする
- SFX グループに Send エフェクトを2つ追加する
- 2つの Send エフェクトの Receive をそれぞれ "BGM\Duck Volume", "Ambient\Duck Volume" に設定し、Send Level を 0.00dB(一番右)に設定する
これで「効果音が鳴っている間は BGM と環境音のボリュームが下がる」ように設定されました。シーンを実行して右クリックで効果音を鳴らし、BGM と環境音のボリュームが下がることを確認しましょう。
実行中に Audio Mixer を見ると、次のように「SFX グループのレベルメーターが上がると、BGM・Ambient グループのレベルメーターが落ちる」ことがわかるでしょう。
エフェクトの設定を他の Snapshot にコピーする
しかし、「効果音が鳴っている間は BGM・効果音の音量を下げる」設定は Field Snapshot に設定したため、Cave Snapshot には設定されていません。つまり、Cave Snapshot に切り替わった時には効果音が鳴っても BGM・環境音の音量は下がりません。洞窟に入ってもこの効果を発生させるには、Cave Snapshot の Duck Volume と Send の設定をする必要があります。これをするには以下のように "Copy effect settings to all snapshots" を選んで、設定を他の Snapshot にコピーするとよいでしょう。
参考資料
- Audio Mixer 公式ドキュメント
- AudioMixerで遊んでみよう!
- 1~3 まで記事があります。JRPG を演出したい人にはピッタリの内容です