ADX2+UE4 コンボシーケンシャルの使い方

# はじめに
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
「コンボシーケンシャル」機能を使い、連続して再生される効果音に変化をつける方法です。

「コンボシーケンシャル」機能では、ゲームで「連続してスコアを獲得するごとに音程を上げる」といったシステム的な活用や
「風切り音が連続で鳴ると大仰な音に変化する」といった演出のほか、
「ロード画面でボタンを連打すると音が変わっていく」などといったちょっとした遊びにも使える機能です。

当記事では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でコンボシーケンシャルキューを作る

### 素材のインポート
「コンボシーケンシャル」に使用する素材を用意し、インポートします。
![A01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/b718a957-f534-8905-663c-55717cf501f3.png)
今回はひとつの効果音につき、4つのコンボ段階を想定して効果音を用意しました。


### キューの作成

キューを新規に作成します。キュータイプはもちろん「コンボシーケンシャル」です。
![A02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/f8547d5d-62eb-3e34-ea7b-50c80e4e02a1.png)
マテリアルをドラッグ&ドロップし、トラック別に入れていきます。
![A03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/b997ae9d-81d6-d43d-a018-3d256c5f046e.png)




### トラックの設定

トラックを選択した状態で、インスペクターの「コンボ」からコンボシーケンシャルの再生設定ができます。
「コンボ間隔」はコンボの有効時間で、キューが再生されてからこの時間内に再度再生されると、コンボが成立し次のトラックが再生されます。
有効時間を過ぎるとコンボはリセットされ、再度キューが呼び出されても最初のトラックが再生されることになります。
![A04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/1f2c8d47-c849-7d0e-3173-03a8049de175.png)
上記の画像では、3000ミリ秒（3秒）以内に再生された場合コンボが成立します。
「コンボ戻り」ではコンボがリセットされた場合に再生するトラックを指定できます。
![A05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/f55937c2-8215-875a-4c2b-085ce5a4a19c.png)


### キューシートのビルド
ここまでできたらキューシートをビルドします。
![A06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/7ace0b85-21b9-cea6-6a6b-e88eefc543e2.png)

## UE4でキューを再生する

### キューシートのインポート
ビルドしたキューシートをインポートします。
UE4のコンテンツブラウザにacf、acbファイルをドラッグ&ドロップします。
![B01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/78831d3b-585f-4dee-3790-1bec54fbd073.png)
レベルに配置すると、PIE開始時にひとまず再生されるようになります。
![B02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/cc40bced-cfda-4d4c-8d34-a4607aa3aa8a.png)

### ブループリントから再生する
レベルブループリントで再生処理を行います。
レベル上に配置したキューを選択しておきます。
![B04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/ac914a48-4d36-5fda-d219-2b9b837e2abe.png)
「Blueprints」→「Open Level Blueprint」でレベルブループリントを開きます。
![B03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/6cb2c38f-fa2a-cf1b-1161-4573863a0954.png)
グラフ内空欄で右クリックし、選択しておいたキューのリファレンスノードを作成します。
![B05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/d5ab9e9d-c641-42a4-4613-6bdc43033671.png)
Tキーを押したら**Play**ノードでキューが再生されるグラフを作ります。
![B06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/b9b74032-b2f0-4bd0-216e-7d476f26bb67.png)
PIEでテストしてみましょう。3秒以内にTキーを連続して押した場合、違う音が再生されていきます。
3秒が経過してから押した場合、最初のトラックの音声が再生されます。

### 連続で途切れさせずに発音する
上記のように**Play**ノードで再生した場合、Tキーを連打して連続して呼び出した場合音が最初から流れ、再生が途切れてしまいます。
これを防ぐには、**Spawn Sound at Location**か**Spawn Sound 2D**ノードを使用しAtom Cueをスポーンしてしまうのがいいでしょう。
![B07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/0c196679-1ac3-7d63-4399-daadbafb2d4f.png)
![B08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/dd6bb76c-d5a7-df28-ed34-4e6e137b58c2.png)
いずれの場合も「Auto Destroy」にはチェックをつけておき、再生が終了したら破棄されるようにしておきます。

### アニメーション内に組み込んで再生する
Atom Cueはアニメーション内に組み込むことも可能です。この場合もコンボシーケンシャルキューではコンボが成立します。
試しにキャラクターの走りアニメーションにキューを組み込んでみます。
アニメーションアセットを開きます。
タイムラインの「Notifies」上で右クリックし、「PlayAtomCue」を選択します。
![Anim01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/212c7308-a984-956d-2534-3ba69a70f6e1.png)
Notifyが作られるので、Detailsパネルにて再生したいAtom Cueを指定します。
![Anim02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/e2fdc995-54cf-07f9-9782-98493cca66cd.png)
走っている間、キュー内のトラックが上から順番に再生されます。