はじめに
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させた際、
サウンドオーサリングツール「AtomCraft」で複数プロジェクトからエクスポートされたAtom Cue SheetやAtom Cueを併用する方法と、ロード関係のまとめです。
複数人でプロジェクト別に作成した、もしくは別のプロジェクトから流用してきたAtom Cueを再生したい場合、この方法である程度UE4側プロジェクトで処理を統合することが可能です。
当記事ではUE4.23+「ADX2 LE v2.10.05」を使用します。基本的にブループリントのみでの実装を想定しています。
前提
AtomCraftでビルドしたAtom Cueがあることを前提に進めていきます。AtomCraftの使い方は下記の導入編にあります。
「ADX2 for UE4 LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46
実装
併用したいacbファイル、acfファイルを確認する
まずはファイルを把握しておきましょう。キューやキューシートが含まれているacfファイルはもちろん、その再生にはacfファイルも必要です。
これらは両方とも正しくインポートされていても、キューの再生時は対応している(同プロジェクトの)acfファイルを読み込むことが必須です。
通常acfファイルを設定するにはツールバーの「Edit」→「Project Settings」を開きます。
「CriWare」タブ→「Atom Config」の項目に使用したいacfファイルを設定します。
ところが、この方法ではacfファイルをひとつしか設定することができず、ランタイム中に差し替えることもできません。
acfファイルをランタイムで切り替える
実行中にacfファイルを切り替えるには、Load Atom Configノードを使用します。
上記の例では、ふたつのacfファイルを切り替える処理にしています。
Acf Objectピンはインプットができるように見えますが、今のところ対応する変数タイプはなさそうです。
このため、使用したいキューに対応するacfファイルだけは事前に決め打ちしておく必要がある……
のですが、命名規則を決めておけばキューからacfファイルを判別して対応することが可能です。
①再生したいAtomキューのキューシートを取得し、
②最初の3文字を切り出します。
③Switch on Stringノードで識別し、
④対応したacfファイルの読み込みへ分岐します。
この処理により、プロジェクトが判別できる識別子をキューシートの頭3文字につけておくことで対応ができるわけです。
キューシートを読み込む
キューシートを手動で読み込むにはLoad Atom Cue Sheetノードを使います。
通常はキューの再生を直接行うだけでいいのですが、ランタイムでは読み込みに負荷がかかることがあります。
ロード画面やレベル開始時にキューシートの読み込みを行うことでこの問題を解決できます。
別のレベルをロードする際にキューシートはメモリから破棄されますが、ゲームインスタンスなどのレベルをまたぐことができるクラス内で変数として保持しておくことで、メモリに維持することができます。
ロード状況を確認する
isLoadedノードを使うことでキューシートが現在ロード済みかを確認することができます。
上記のグラフ例ではキューシートが正常に読み込まれた場合にTrueを返し、画面に表示します。
動的にキューを取得する
キューシートがアセットに組み込まれており、かつロード済みの場合はキューを指定せずとも取得し、再生することができます。
Get Atom Cue by Name、Get Atom Cue by Index、Get Atom Cue by Idノードを使用します。
それぞれ名前のとおり、キュー名、インデックス番号、IDで指定することができます。
このノードを使えば、アセット内にキューが含まれていなくても再生が可能になります。