はじめに
ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではアンリアルエンジン5とサウンドミドルウェア「ADX for UE」を使って、ゲーム中の攻撃などのヒットサウンドを多機能に実装してみます。
ADX for UEの新バージョンにて、「ゲーム変数」機能に対応したため、UE5でも同様の実装ができるようになりました。
記事と同様の実装を行えば、ADX旧バージョンでも同じ処理が実装可能です(一部ノード名などが変化しています)。
当記事ではUE5.3を使用します。基本的にブループリントのみでの実装を想定しています。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/
前提
ADX for UEの導入や基本的な使い方は以下の記事にあります。必要に応じて参照してください。
ADX for UEの導入で、一歩上のサウンド表現を(導入編)
ADX for UEの導入で、一歩上のサウンド表現を(実践編)
実装
AtomCraftで効果音を構成する
マテリアルの用意
今回は3連の打撃を1コンボとし、それぞれの打撃に弱・中・強の3段階の音を用意しました。
合計9つのマテリアルになります。
キューの作成
キューシートで右クリックし、「新規オブジェクト」→「キュー『スイッチ』の作成」を選択します。
これがコンボ1段目のキューとなるので、トラックを分けて1段目の「弱・中・強」のマテリアルをそれぞれドラッグアンドドロップして配置します。
ゲーム変数の設定
3つのトラックからひとつをゲーム中選択して再生するには、ADXの**「ゲーム変数」**機能を使います。
プロジェクトツリーの「ゲーム変数」で右クリックし、「新規オブジェクト」→「ゲーム変数の作成」を選びます。
新しくゲーム変数が作られるので、適当に名前をつけます。画像では「HitStrength」としました。
キューを選択し、インスペクター中段にて「スイッチ」のボタンを押し、スイッチ変数を先ほど作成したものにします。
「等分化」ボタンを押し、各トラックに振り分けられるゲーム変数の幅が均等になるようにします。
これでゲーム変数が0.0~1.0に近づくほど、ヒット時のサウンドが弱~中~強へと変化します。
プロジェクトツリーのゲーム変数を選択し、インスペクターで「初期値」を変更すると再生されるトラックも変化します。
コンボ用のキューを作成
ここまで完了したら、3つのキューをまとめてコンボサウンドにするためのキューを作ります。
キューシートで右クリックし、「新規オブジェクト」→「キュー『コンボシーケンシャル』の作成」をします。
コンボ1,2,3段目のキューをドラッグアンドドロップしてトラックに配置します。
キューそのものがトラックに登録されました。上からコンボ1,2,3段目となるよう配置します。
キューは「キューリンク」という機能で呼び出されています。これはもとのキューに紐付けられているので、各キューが編集されるとコンボ用のキューにも影響を与えることになります。
インスペクターにて、「コンボ間隔」を「1000(ミリ秒)」とします。これで1秒以内に連続でキューが再生された場合、「コンボ」として異なるトラックが再生されていきます。もちろん各トラックはゲーム変数の値を反映して再生されます。
キューシートのビルド
UE5での実装
UE5にキューシートをインポートする
ビルドしたacfファイル、acbファイルをコンテンツブラウザ(コンテンツドロワー)にドラッグアンドドロップしてインポートします。
acfファイルインポート時のダイアログにはどちらも「Yes」を選択します。
これにより、プロジェクトにAtom Configファイルが自動的に設定されます。
Atom Config、キューシートの両アセットがプロジェクトに入っていることを確認します。
キューシートを開き、キューが再生できることを確認します。
連続でコンボキューを再生すると、この状態でもサウンドが変化します。
攻撃ヒット時にサウンドを再生する
キャラクターのブループリント内に基本的な当たり判定処理を作ってみました。
(画像をクリックすると拡大されます)
ボックス型のトレースをキャラクターから進行方向に飛ばし、対象となるトレースチャンネルにヒットすればダメージが発生するものです。
ダメージを受け渡すApply Damageノードの先に、Spawn Sound at Locationを配置します。
UE5デフォルトの同名ノードではなく、ADXによって提供されたノードを使用してください。
Break Hit Resultノードの「Locaiton」ピンを使い、正確なヒット箇所(トレースがヒットした座標)に音を配置しています。処理やゲームジャンルによって、キャラクター座標に再生したり、2Dサウンドとして直接スポーンしてもいいでしょう。
次に、再生するキューを指定してあげる必要があります。
Spawn Sound at Locationノードの青いインプットピンを右クリックし、「Promote to Variable」で変数化します。
コンパイルし、Detailsパネルにて再生するキューシートとキューを指定します。今回は「Cue_Combo」としました。
この状態でテストすると、ヒット時にキューのサウンドが再生されます。1秒以内に再ヒットすると、コンボの2段目、3段目のサウンドが再生されるでしょう。
打撃の強さをゲーム変数に反映する
さて、先ほどのサンプルのグラフにも出ていましたが、今回は「AttackStrength」という変数をキャラクターに持たせています。
これはそのままキャラクターの現在の攻撃の強度となりますので、この値をADX側のゲーム変数に渡してあげるとサウンドを変化させられそうです。
ヒット音を鳴らすと同時に、Set Game Variable Value by Nameノードを使い、ゲーム変数名と値を指定します。
(旧バージョンではSet Atom Game Variableノードでしたが、ノード名が変更されました)
名前は「HitStrength」(AtomCraftでつけた名前)、値はキャラクターの変数「AttackStrength」を代入します。
状況によって数値で補正をつけてもいいでしょう。
テスト用に、押したボタンによって攻撃の強さが変わる処理を作ります。
次のグラフでは、Input Key Z~Cを作りキーボードの対応ボタンを押した際に変数「Attack Strength」の値を変えています。この値がゲーム変数に反映され、ヒット時のサウンドが変化することになります。
ざっとコンボ中のサウンド変化、攻撃の強弱による打ち分け機能を盛り込んでみました。
さらにAisacコントロールやバスセンドなどを使い、攻撃のヒット箇所やガード時などに音が変化する、といったことも可能です。