はじめに
アンリアルエンジン4とサウンドミドルウェア「ADX for UE4」を使いて、特定の効果音が再生されるのをトリガーとして、他の効果音のAISACコントロールを行う方法です。
たとえば「大きな爆発音が再生されると、プレイヤーの聴覚が一時的に異常をきたし他の音がくぐもる」「焚き火に燃料を投げ入れると、一瞬だけ火の音に勢いがつく」などの演出が想定できます。
この機能はAISACモジュレーショントリガー(AISAC Mod Trigger)と呼ばれるもので、キュー再生時・停止時に影響される側のキューのAISACコントロールを操作することができます。
AtomCraftで設定してしまえばADX側で自動的に行われる処理で、プログラム側で特別な処理を組む必要がありません。
前提
当記事ではUE4.26.1を使用します。基本的にブループリントのみでの実装を想定しています。
ADXはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/
なお、最近ADX2からADXへ名称が変更になりましたが、ツール構成は変更ありません(2がないから古いほう、というわけではありません)。
記事執筆時点のADX for UE4のSDKバージョンはv1_29です。
ADX2 for UE4の導入や基本的な使い方は以下の記事にあります。必要に応じて参照してください。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46
実装
AtomCraftでREACTを設定する
まずはAtomCraftでキューにREACT機能を設定していきます。
当機能ではUE側で行うことは少ないので、この工程が要となります。
マテリアルの用意
効果音素材となるマテリアルを用意します。
サンプルのシチュエーションとして「川の近くで爆発が起こり、一時的に川の音がくぐもり聞こえづらくなる」というものを想定します。
今回は爆発音をふたつのSEで構成しているので、マテリアルを3つ用意しました。
川の音はループするよう、マテリアルを選択してインスペクターでループ情報の上書きを「True」にしておきます。
キューの作成
効果音からキューを作成します。
キューシートを選択し、右クリックして「新規オブジェクト」→「キュー『ポリフォニック』の作成」を選びます。
必要なマテリアルをドラッグアンドドロップしキューを構成します。
川の音用のキューも同様に作成します。
AISACコントロールを作成する
川の音に対しAISACを作成します。
トラックリストの空欄で右クリックし、「新規オブジェクト」→「AISACの作成」を選択します。
AISACグラフタイプを「バンドパス - Cof高域」とし、パラメータに応じて音がくぐもるようにします。
グラフを任意の形に設定します。
注意点として、グラフの始めと終わりでパラメータが同一となるようにしてください。ずれが生じると、AISACコントロール終了後もサウンドに変化が起こったままになってしまいます。
また、次の画像のようにコントロールタイプを「オートモジュレーション」、タイプを「ワンショット」、トリガタイプを「キー」とします。
サウンドがどのように変化するか確認したい場合、トリガタイプを一時的に「再生」としてみてください。
テスト再生することでサウンドに変化が起こります。
テスト後は忘れずにトリガタイプを「キー」に戻しておきます。
AISACモジュレーショントリガーを設定する
REACTの設定をしていきます。
まずは影響されるサウンドとトリガーとなるサウンドの分別のため、カテゴリを設定します。
プロジェクトツリーのカテゴリグループを右クリックし、「新規オブジェクト」→「カテゴリの作成」を選択します。
カテゴリをふたつ作り、それぞれに名前をつけておきます。影響される側は「Category_SE_Rec」、トリガー側のカテゴリ名は「Category_SE_Trigger」としました。
今度はプロジェクトツリーのREACTを右クリックし、「新規オブジェクト」→「REACTの作成」を選びます。
作成したREACTに適当な名前をつけます。
名前をつけたREACTを選択し、インスペクターでパラメータを設定します。
「変化カテゴリ」に影響されるカテゴリを、「トリガーカテゴリ」にトリガーとなるカテゴリを指定します。
REACTタイプを「AISAC Modトリガー」に変更します。
また、ここで任意のモジュレーションキーを設定することで複数のモジュレーショントリガーを扱うことが可能です。
キューシートのビルド
UEで効果音を再生しテストする
UEに移り、サウンドを再生してどう変化するか確かめてみましょう。
キューシートのインポート
まずはビルドしたacfファイル、acbファイルをインポートします。
ツールバーの「Edit」→「Project Settings」からプロジェクト設定を開きます。
「CriWare」タブにて、Atom Configの項目にインポートしたacfファイルを指定します。
ここまで設定できたら、一度エディタを再起動することをおすすめします。
そのまま進行すると正常にREACTによる変化が起こらない場合があります。
効果音を再生する
コンテンツブラウザからレベル上に川の音となるキューをドラッグアンドドロップして配置します。
レベルブループリントを開きます。
テスト用の処理は簡単なものです。
Input Keyでキーが押されたことを感知し、Play Sound at Locationで爆発音のキューを再生します。
テスト用なので爆発音のボリュームをごくごく小さくとどめたほうが分かりやすいかもしれません。
また、Play Sound at LocationノードはADXにより追加された、Atomカテゴリにあるノードを使用してください(同名のノードがふたつあります)。
ゲームを再生しRキーを押すことで爆発音が鳴り、それをトリガーとして川の音がくぐもるような変化が起きるはずです。
補足
紹介した方法では対象となるサウンドすべてにAISACコントロールを設定する必要がありますが、「グローバルAISAC」機能を使えばすべてのキューから参照できるAISACコントロールを適用することができます。
グローバルAISACの公式ヘルプ
https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_global_aisac.html