LoginSignup
4
0

More than 3 years have passed since last update.

ADX2+UE4で、物理挙動にランダム性のある効果音をつける

Last updated at Posted at 2020-04-24

はじめに

UE4.23+「ADX2 LE v2.10.05」を使用します。
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
ゲーム中のオブジェクトが落ちたり転がったりして、ぶつかった際に様々な音がランダムに再生され、また衝撃の状況により変化が出るようにしてみます。

今回の実装例

UE4標準の「Physics Simulation」を有効にすることにより物理挙動は簡単に実装できます。
衝撃の際、どれだけ大きな力がかかったか、また物体の重さにより音が変化する実装をします。
A00.png

前提

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

やること

  • AtomCraftでキューを作成
  • パラメータを調整し、音に性質を追加する
  • UE4にインポート
  • Physicsの調整
  • ブループリントで、サウンド処理を実装する

実装

AtomCraft側

素材の用意

いくつかの衝撃音が必要になります。
マーケットプレイスでもいい感じの音が仕入れられるので、アテがない方はチェックしてみるといいでしょう。
A01.png
ものが落ちる音が数パターンあれば大丈夫です。
用意できたら、マテリアルツリー内にインポートします。
今回は通常の衝撃音3種+強い衝突が起こった際の音を1種用意しました。
A02.png

キューの作成

Atomキューを作成します。
今回は「新規オブジェクト」→「キュー『ランダムノーリピート』の作成」を選びます。
「ランダムノーリピート」のキューでは、各トラックがランダムに再生されます。
「ランダム」のキューと異なり、直前に再生された音以外が再生されるので音のばらつきを表現したい場合に使うといいでしょう。
A03.png
作成したキューに分かりやすい名前をつけます。
A04.png
用意したサウンド素材をマテリアルツリーからドラッグアンドドロップしてトラックを作ります。
A05.png
A06.png
この時点で再生ボタンを押すと、4つのトラックからどれかが再生されます。
大きな衝撃が起こった際の音のためのキューも作ります。こちらも「ランダムノーリピート」で作りました。

トラックはひとつしかないため、常に1種の音から再生されます。

キューの設定

再生に必要なキューの設定をします。
「ランダム」や「ランダムノーリピート」キューでは、トラックを選択した状態でインスペクターの「確率」をいじるとトラックの再生確率を変えることができます。
A07.png

ピッチやパンニング(聞こえる方向)にもランダム性をもたせる

さらに、キューの設定により聞こえ方にランダム性をもたせることもできます。
キューを選択し、インスペクターにてボリュームとピッチをランダム幅を設定します。
A10.png
同じ用に聞こえる方向や角度にもランダム幅を設定できます。
A11.png
これらはキューだけでなく、トラックに対して設定することも可能です。

キューシートのビルド

サウンドが完成したら、キューシートをビルドします。
A08.png
A09.png

UE4側の実装

Unreal Editorに移ります。

サウンドのインポート

ビルドしたキューシートをインポートします。
B01.png
Project Settingsの「Atom Config」が正しい(今回作成されたもの)か確認しておきましょう。
B02.png

インポートしたAtom Cueをダブルクリックして開きます。
UE4上で3D空間上でのサウンド減衰を設定するには、Sound Attenuationを設定します。
B20.png
もし該当ファイルがない場合、「Create New Asset」で作成することができます。
B21.png

アクターのセットアップ

物理挙動が働くオブジェクトとなる新規アクターを作成します。
コンテンツブラウザで右クリックし、「Blueprint Class」を選びます。
B03.png
クラスは「Actor」を選択します。
B04.png
分かりやすい名前を付けます。
B05.png

作成したアクターをダブルクリックして開きます。
「+Add Component」から「Cube」を追加します。
B06.png
とりあえずはこれがアクターが持つ「物体」になります。
B07.png
Detailsパネルの「Simulate Physics」にチェックを入れると物理演算が有効になります。
B08.png

Physics設定

Detailsパネルの「Physics」では、物理挙動を細かく設定することができます。
B23.png
パラメータについての詳しい解説は、公式のドキュメントを参照するといいかもしれません。

物理ボディ リファレンス
https://docs.unrealengine.com/ja/Engine/Physics/PhysicsBodies/Reference/index.html

ブループリントで衝撃時に音を出す

アクターのイベントグラフに移動し、処理を書いていきます。
B09.png
Componentsパネルの「Cube」をドラッグアンドドロップし、リファレンスノードを置きます。
B10.png
Cubeノードから線を伸ばし、Set Notify Rigid Body Collisionノードを配置します。
B11.png
これにより、物理演算による衝突時にイベントが発行されます。
B12.png
Componentsパネルの「Cube」を右クリックし、「Add Event」→「Add OnComponentHit」をクリックします。
B13.png
On Component Hitイベントが作成されました。
B14.png
衝突に関する情報を取るため、「Hit」ピンから線を伸ばしてBreak Hit Resultノードを置きます。
B15.png
このノードから衝突した場所、もの、角度など様々な情報が取れます。
B16.png
Play Sound at Locationを置きます。Atomカテゴリの方です。
B17.png
Break Hit Resultの「Location」ピンをつなげ、再生するAtom Cueを指定します。
B18.png

とりあえず音は鳴ります。この状態で試しにゲームを再生すると…… 試す場合は音量注意
B24.png
サウンドは再生されますが、物体が静止したように見えても細かな振動で再生されてしまいます。
衝撃が一定以上の大きさのときのみ音が出るよう、改善を加えてみたほうがよさそうです。

衝撃の大きさによる再生制限をかける

衝撃の大きさはHitイベントの「Normal Impulse」からVectorLengthをかければ取得することができます。
B19.png
上記のように、一定値以上だったら音が鳴るようBranchを挟むといいでしょう。

衝撃の大きさにより音を変化させる

他にも、物体の重さを考慮して計算に入れるのも面白いかも。重さは物理演算が有効なコンポーネントに対して「Get Mass」で取得することができます。
B22.png

4
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
4
0