はじめに
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させてサウンドを扱う場合、キューには様々な管理方法があります。
オーソドックスに使う場合、サウンドオーサリングツール「AtomCraft」上でキューシート、キューをビルドしてしまいUE4に取り込む方法がメジャーです。
しかし、キューシートのアセットさえあればブループリント上からキューを取得したり、またcsvを使ってサウンドの名前やパラメータの管理をすることもできます。
コンテンツブラウザ内のアセットも最小構成になります。
これにより、ADX2やAtomCraftを使わないアーティストの方との連携もやりやすくなるでしょう。
当記事ではUE4.26.1を使用します。基本的にブループリントのみでの実装を想定しています。
ADX2はインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx2-le/
前提
ADX2 for UE4の導入や基本的な使い方は以下の記事にあります。必要に応じて参照してください。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46
実装
キューシートを用意する
今回はサンプル用に、BGMやSE、UI用のサウンドキューが入ったキューシートをAtomCraftで用意しました。
普段どおりビルドします。
UE4へはキューシートとAtomConfigファイルのみをインポートします。
キューシートのインポート時に「New Assets」の場所で「Do Not Create」を選択すると、キューがインポートされなくなります。
下部のキューリストのチェックを外しても同様です。
最小構成のファイルがインポートされました。
BPからキューシートを読み込み、キューを取得する
変数を用意する
レベルブループリントを開き、キューシートを取得する変数を用意します。
「My Blueprint」にて、変数を追加します。
「Variable Type」を「Sound Atom Cue Sheet」の「Object Reference」にします。
名前をつけ、BPをコンパイルしてから「Default Value」を今回使用するキューシートにします。
変数名は「CurrentCueSheet」にしました。
変数からキューを取得する
作成した変数のGetノードを配置します。
GetノードからGet Atom Cue by Nameノードが引き出せます。このノードで名前を指定してキューを取得できます。
取得したキューを参照し、再生・制御が可能です。
次のノード配置例では、キーボードの「1」キーで効果音が再生されます。
csv(データテーブル)からキューシートを管理する
Excelなどの表を使ってキューを取得・管理することもできます。UEに「データテーブル」として取り込んで使用します。
データテーブル用のStructureを用意する
データテーブルが持つ要素を登録するには、「Structure」(構造体)アセットを作成する必要があります。
コンテンツブラウザで右クリックし、「Blueprints」→「Structure」を選択します。
適当に名前をつけます。
Structureを開き、「New Variable」ボタンを押して要素を追加していきます。
今回はシンプルに、「キューのインデックス」「キュー名」「ループタイプ」「UI用サウンドか否か」を情報として持たせています。
データテーブルを作成する
コンテンツブラウザで右クリックし、「Miscellaneous」→「Data Table」を選択します。
先ほど作成したStructureを選択します。
「Add」ボタンを押してインデックスを追加していき、それぞれ情報を入力します。
「bUISound」では、距離の関係ない(3D空間上で扱わない)BGMとUI音でTrueにしています。
BPからデータテーブル情報を取得し、再生する
レベルブループリントでデータテーブルを扱っていきます。
Get Data Table Row (データテーブル名)ノードで名前を取得してデータテーブル情報を得ることができます。
「Out Row」ピンからBreakノードをつなげることで、取得した行の要素を分解して取り出せます。
取り出した要素から「Cue Name」ピンをGet Atom Cue by Nameにつなげます。
「Loop Type」でループ情報が指定できるよう、キューに対してSet Loop Settingノードをつなげます。
「bUISound」が「True」であればSpawn Sound 2Dで、「False」であればSpawn Sound at Locationで座標を指定して再生します。
もちろん、Get Data Table Rowノードの「Row Name」は変数で指定可能です。
キューは名前での指定ではなく、Get Atom Cue by Indexを使ってインデックス情報でも指定可能です。
スプレッドシートでデータテーブルを記述し、インポートする
同じ書式のシートをGoogleスプレッドシートで書くこともできます。
「ファイル」→「ダウンロード」→「カンマ区切りの値(.csv、現在のシート)」でスプレッドシートを出力します。
コンテンツブラウザにドラッグアンドドロップすると、インポートダイアログが表示されます。
キューシートに適したStructureを指定して「Apply」を押します。
同じような形式でデータテーブルを取り込むことができます。
「Reimport」ボタンを使用して、スムーズなイテレーションも可能です。