はじめに
UE4.23+「ADX2 LE v2.10.05」を使用します。
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
ゲーム内で複数のキャラクターボイスを切り替えて扱う際の再生管理を容易にします。
前提
「ADX2 for UE4 LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46
#やること
- AtomCraftでキャラクターごとにキューシートを作成
- UE4にインポート
- ブループリント処理によるボイス再生
- キューシートを切り替え、複数キャラボイスに対応
実装
##AtomCraft側の作業
複数のキューシートを作成する
今回扱う処理は実にシンプルで、異なるキューシートで同じ名前のキューが共存できることを利用して動的にサウンドを差し替えるものです。
キューシートは「キャラクターボイスリスト」で、キューは「ボイスデータ」そのものとして考えられます。
キャラAとキャラBのボイス再生処理はまったく同じものを使用していながら、それぞれのキャラクターが持つ「ダメージ」時などボイスを再生しています。
サンプルとして、ワークユニットツリーにキャラクター2人のキューシートを作成します。
各キューシートに同じ名前のキューを作成します。
作成するキューのタイプは特別な処理がなければ「ポリフォニック」です。
片方のキューシートに作成したキューをコピペしてしまえば楽かも。
キューに対して、対応するボイスのサウンドを入れます。
再生ボタンを押して、キューとボイスが正しいか確認すると安全です。
キューシートのビルド
AtomCraftでの作業はこれで完了ですので、キューシートをビルドします。
すべてのキューシートにチェックがついていることをチェックしてからビルドします。
UE4側の実装
キューシートのインポート
ビルドしたデータをすべてインポートします。キューシートごとに分割されたファイルとして吐き出されているので、インポート漏れがないように注意してください。
Atom Configファイルの設定
Project SettingsのCriWareタブで、今回使用するAtom Configファイルを設定します。
ブループリントでキャラクターボイスを再生する
導入編の記事ではレベルに直接Atom Cueを置いて再生していましたが、配置していない音声も再生できるよう、その場でボイスデータを取得してロードしてみましょう。
暫定としてレベルブループリントに処理を書きます。
「Load Atom Cue Sheet」でキューシートを呼び出します。「Cue Sheet」は作成したキューシートのうち、どちらか片方のキャラクターのものを指定します。
「Get Atom Cue by Name」でAtom Cueにアクセスします。「Load Atom Cue Sheet」のReturn ValueからTargetの青ピンにつなげます。
これはキュー名で取得するノードですので、再生したいキュー名を入力します。
「Play Sound at Location」ノードで実際に再生します。再生場所は「Get Player Character」で取得したプレイヤーキャラの座標にしています。
もっと厳密に指定するなら、キャラクターメッシュの口部分にソケットを仕込んでおき、その座標を取得するのがいいでしょう。
この時点でゲームを再生してみると、Tキーを押すとキャラクターの声が流れます。
その他のキューシート、キュー取得法
「Load Acb」ノードを使えば、Acbファイル名を指定して直接キューシートを読むことができます。
「Get Atom Cue by Name」以外にも、「Get Atom Cue by ID」や「Get Atom Cue by Index」を使うことでキューのIDやインデックスを指定してアクセスすることもできます。
キューを差し替えてキャラクターボイスを変更する
ゲーム中にリアルタイムで参照するボイスを切り替えてみます。
以下はなんの変哲もない、「1」キーを押したらキューシートをロードする処理です。
「Return Value」のピンを右クリックして「Promote to Variable」をクリックし、ロードしたキューシートを変数化します。
Sound Atom CueSheetタイプの変数が出来上がるので、名前を適当につけます。
同じように処理を作り、1キーを押したらキャラクターAのボイスが載ったキューシートが、2キーを押せばキャラクターBのボイスが載っているキューシートが読まれるようにします。どちらも変数「Current Cue Sheet」を上書きされるので、最後に読んだキューシートが参照されます。
この状態でゲームを再生すると、1キーを押した状態だとキャラクターAの、2キーを押した状態だとキャラクターBのボイスが流れます。
ゲームは同じ「ダメージ」を受けた状態でも、読んでいるキューシートによって違うキャラクターの声が再生されるわけです。
上記の「Load Acb」ノードを使えば文字列でキューシートを指定できるので、より多くのキャラクターが登場する場合に便利です。
補足
キューシートさえ読んでしまえば、ブループリントノードからAtom Cueを読み出すことが可能です。
アセットにキュー自体が含まれていなくても、ゲーム中にその場でキューを再生できます。