ADX2 for UE4で、ゲームの状況に応じて効果音のバリエーションを変える

# はじめに
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
ゲーム側での設定に応じて再生する効果音を一括で切り替える実装についてです。

ADX2の「ゲーム変数」機能はアプリケーション内でサウンドのステータスを一括変更（グローバス変数にて変更）できます。
たとえば音ゲーの打鍵音やUIのサウンドがいくつか用意されており、ユーザーの好みによって変更できるケースなどに役立ちます。
異なる効果音の再生にあたってはブループリントの処理を新しくする必要はなく、ただひとつの変数を変えるだけで済みます。

当記事ではUE4.23+「ADX2 LE v2.10.05」を使用します。

# 前提
「ADX2 for UE4 LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX2 for UE4の導入で、一歩上のサウンド表現を（導入編）
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を（実践編）
https://qiita.com/SigRem/items/c089b71c42e898980a46

# 実装
##AtomCraftでの実装

### マテリアルをインポート
使用する音源をインポートします。
![A_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/ab7e766c-6e6d-9aa1-638c-b8f5b0c246f4.png)
今回は4種類のサウンドを用意し、ユーザーの設定次第で好きなものを使用できるようにします。

### ゲーム変数の作成
「ゲーム変数」を作成します。
ゲーム変数は0～1の間で変動させるfloat型変数で、ゲーム側でこの値を変えることで効果音に変化をもたらします。
「プロジェクトツリー」の「ゲーム変数」を右クリックし、「新規オブジェクト」→「ゲーム変数の作成」を選択します。
![A_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/4fbdee43-44dc-9b1b-4342-0cb148b0a8d5.png)
新しくゲーム変数が作られます。
![A_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/281aa369-89e4-9d84-a469-2f1dfcd585f1.png)
F2キーを押して、使用用途に合わせてリネームします。
![A_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/666696a4-27a8-4b08-79ef-443ee2d9aa61.png)

### キューの作成
新規にキューを作成します。「新規オブジェクト」→「キュー『スイッチ』の作成」を選びます。
![A_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/4149dc9f-61cf-11b7-a64e-cb27406ef3ae.png)
作られたキューに名前をつけておきます。
![A_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/21e132c9-0363-83ac-c813-29f644fac492.png)
用意した音源をトラック別に放り込みます。
![A_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/e0175c7e-d0cf-131c-3292-cde16b03abd4.png)


### ゲーム変数の適用
スイッチタイプのキューではトラックごとにしきい値が設定でき、この値以上になると該当のトラックの音が再生されるようになります。
**既に再生されている音は上書きされません。**
「インスペクター」の「スイッチ」をクリックすることでスイッチ変数を設定するメニューが現れます。
まずは今回作成したゲーム変数「UI_Type」を選択します。
![A_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/5e31eb5c-a212-dba8-a672-db58c9f38f91.png)
トラックごとにしきい値を設定できるようになります。変数の幅は0～1なので、スイッチ幅の総計が1.0を越えてしまう場合エラーになります。
![A_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/b2aa1309-301c-fb6c-e73d-730daeb66c06.png)
スイッチ幅を「0.25」ずつにすると、正常に再生できるようになります。
![A_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/32ed547c-d4e9-5e11-f22b-20295b7051e6.png)

###テスト再生
ゲーム変数などを使用した特殊なキューのテスト再生には「セッションウィンドウ」を使います。
ツールバーから「表示」→「セッションウィンドウ」を選びます。
![A_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/9de7a06f-8067-24d5-9422-869599be767c.png)
セッションウィンドウが現れます。
![A_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/d9eefd92-72b1-d3a0-a694-994bde9e6c09.png)
キューをセッションウィンドウにドラッグアンドドロップして登録します。
![A_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/6e062b55-5fe6-d892-cf4e-039cea865d9e.png)
セッションウィンドウの上部、「ゲーム変数」をクリックすることで変数の変動による再生の変化を確認することができます。
![A_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/e90eee90-42a2-fa97-6fa0-94e2fdf2d9c4.png)
「UI_Type」にチェックを入れてスライダーを動かし、再生ボタンを押すことで異なるサウンドが再生されるはずです。
![A_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/906ce70a-91bd-5777-fe6c-7ea30e0b0cfc.png)

### キューシートのビルド
確認ができたらキューシートをビルドします。
![A_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/dae58a30-24be-16cf-1de8-51689b8de363.png)
![A_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/6519c7c6-6c0f-2d10-31e6-99cc364e5f46.png)


## UE4での実装

### キューシートのインポート
ビルドしたキューシートをUE側でインポートします。
![B_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/7a784b9a-1bc6-1637-deca-1d63d91a74a8.png)
acfファイルの設定も忘れずに。こちらの設定方法は冒頭にリンクがある導入編をご覧ください。
![B_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/d313f19f-2295-2d17-85b8-dfea73766897.png)


### ブループリントで音を再生する
今回は試しに、直接レベルブループリントに処理を書いてしまいます。
レベルブループリントのエディタを開きます。「Blueprints」→「Open Level Blueprint」です。
![B_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/080cd664-622b-1b4d-d3ec-4620d821b488.png)
**Input Key T**で「T」キーを押したら始まるイベントをつくり、**Spawn Sound 2D**で距離減衰のないサウンドを再生します。
対象は先ほど作成したキューにします。
![B_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/c34ec360-0657-f92f-617d-2622ec1510df.png)
**「Spawn Sound Attached」ノードは2種類あることに注意してください。**カテゴリが「Atom」になっているものを使います。
![B_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/19bf2b65-6fcd-b2ed-d43e-e0708ae1609f.png)
これでひとまず音は鳴りましたね。


### ゲーム変数を変化させる
ゲーム変数の操作もブループリントから行います。
**Set Game Variable by Name**がそれにあたります。ひとつのノードで済むので楽ですね。
![B_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/36068417-4489-66bd-1dc6-4266a722eab8.png)
今回は4つのサウンドバリエーションを用意したので、4つのキーを押すとゲーム変数を変化させるようにしました。
数値は**AtomCraftで設定したしきい値を超えるように入力**してください。
![B_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/4f8167fb-e46b-e39b-e8ea-0a5c8504d225.png)

これでゲーム変数によって変わる音が実装できました。コンフィグなどで値を変化させれば、ゲーム中どこでも変化した音を参照できます。