0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ADX2+UE4で作る立体環境音(拡張編)

Last updated at Posted at 2021-02-25

はじめに

アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
環境音にひと工夫して、立体的なアンビエントサウンドを汎用的に使えるよう実装していきます。
前回公開した記事では鳥のさえずり音を立体的な空間にスポーンし、ランダムな方向から聞こえるような実装をしました。
https://qiita.com/SigRem/items/ef86c0faf71ecd2e7974
当記事ではこれに改良を加え、より多くのシチュエーションに対応できるよう使い勝手のいい機能にしていきます。

当記事ではUE4.23+「ADX2 LE v2.10.05」を使用します。基本的にブループリントのみでの実装を想定しています。
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

実装

再生するサウンドを簡単に差し替え可能にする

ブループリントを書き換えなくても、レベル上で手軽に再生するサウンドを編集可能にします。
新しくアクターを作成します。
01.png
02.png
イベントグラフを開き、前回記事「」の処理をそのままコピー&ペーストします。
この時点ではほぼ同じ内容です。汎用的な音を再生したいので、カスタムイベントの名前を「PlaySound」に変更します。
それに伴い、Set Timer by Function Nameノードの「Function Name」も「PlaySound」に変えておきます。
03.png

Play Sound at Locationノードの「Sound」の青いインプットピンを右クリックし「Promote to Variable」をクリックします。
04.png
新しく変数が作られ、自動的に接続されます。適当に名前をつけておきましょう。画像では「Sound」としています。
05.png
作成した変数はMy Blueprintパネルの「Variables」内にあります。デフォルトでは右側に目が閉じているマークがあるので、クリックして目玉が開いた状態にします。
06.png
一度コンパイルしておき、DetailsパネルでデフォルトのAtom Cueを指定しておきます。
07.png
レベル上にアクターを配置し、選択した状態でDetailsパネルで再生するAtom Cueが選べるようになっています。
08.png

より多くのパラメータをカスタマイズ可能にする

パラメータを変数化しておき、多彩な鳴らし方が可能になるよう改良します。
まずは音声の再生間隔を変数化します。
Random Float in RangeのふたつのFloat型パラメータを「Promote to Variable」で変数に変化させます。
それぞれ「IntervalMin」「IntervalMax」と名前をつけ、忘れずに目玉のアイコンをクリックして開いている状態にします。
11.png
12.png

ゲーム開始時にもイベントの発生タイミングにランダム性をもたせたいので、Set Timer by Function Nameにも一連のノードをコピーします。
13.png
また、Play Sound at Locationノードの「Volume Multiplier」「Pitch Multiplier」も変数化して編集可能にしました。
14.png

レベル上で各種パラメータが変更可能になりました。
15.png

再生する座標をカスタマイズ可能にする

サウンドはプレイヤーの周りのランダムな座標で再生されますが、この範囲も変更できるようにします。
Vector型の変数をふたつ作ります。「LocationVectorMin」「LocationVectorMax」と名前をつけ、公開設定にしておきます。
16.png
次のようになっている座標のランダム処理を……
17.png
次の例のように構成しなおします。ふたつの変数の要素を一度Break Vectorで分解し、Random Float in Rangeノードにつないでいます。
18.png

これで再生範囲も編集可能になりました。
19.png
変数の初期値が0になっている(再生範囲が狭すぎて再生されない)事故を防ぐため、Default Valueを設定しておきましょう。
20.png

再生する範囲(トリガー)を指定する

プレイヤーが近づくと再生が開始されるよう、再生範囲を指定できるようにします。
「Box Collision」コンポーネントを追加します。
21.png
再生範囲となるVector型変数「TriggerBoxExtent」(トリガーボックスの範囲)を作成し、公開設定にします。
22.png
「Construction Script」タブに移り、Set Box Extentノードを置きます。「Construction Script」タブはエディタ内で、レベル上に配置したアクターの変数が変更されると走る処理です。
23.png
もし「Construction Script」タブが見当たらない場合、「My Blueprint」パネルの「Construction Script」をダブルクリックすると開くことができます。
23a.png
「TriggerBoxExtent」変数のDefault Valueを適当に設定しておきます。
24.png

イベントグラフに戻り、Box Collisionコンポーネントを右クリックし「Add Event」→「Add OnComponentBeginOverlap」を選択します。
25.png
ボックス内になにかが進入した際のイベントが作られます。ゲーム開始時に処理は行わなくなるので、Event BeginPlayノードの接続は解除しておきます。
26.png
プレイヤー以外がボックスに進入しても処理を行わないよう、感知したアクターがプレイヤーである(プレイヤーの同一である)ことをBranchノードで判別します。
27.png
ぼっくすから出た際のイベントも追加します。今度は「Add Event」→「Add OnComponentEndOverlap」です。
28.png
カスタムイベントのループ処理を解除するには、Clear Timer by Function Nameを使います。
29.png
レベル上でイベントの開始範囲を設定できるようになりました!「TriggerBoxExtent」変数の値を変更することで、黄色い枠線の範囲が変わるはずです。
30.png

このままではアクターを移動させた際にいちいち「Construction Script」タブの処理が走ってしまうので、変数の値を変えたときのみに処理をさせるように変更します。
アクターの「Class Settings」を開きます。
31.png
Detailsパネルにて「Run Construction Script on Drag」のチェックを外します。これだけです。
32.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?