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?

UE5 + ADXで作る、VR空間でのサウンド表現(基本編)

Last updated at Posted at 2025-08-06

はじめに

ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではVRプロジェクトをセットアップし、例として音の鳴るおもちゃを作りながら、「ADX for UE」を使った基本的なサウンド再生を実装します。

B15.png
キューブを振るとマラカスの音が鳴り、速く振るほどピッチが上がったり、落として衝突すると大きな音が鳴るように

当記事ではUE5.6 及び 「ADX LE UE SDK(2.04.02)」を使用します。
また、基本的にブループリントのみでの実装を行います。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/

前提

「ADX for UE LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX for UEの導入で、一歩上のサウンド表現を(導入編)

ADX for UEの導入で、一歩上のサウンド表現を(実践編)

実装

AtomCraftでサウンドを用意する

サウンドオーサリングツール「AtomCraft」を起動し、UE5で使うためのキューシートをビルドしていきます。
今回は衝突音である「SE_Ball」、マラカスの音である「SE_Maracas_Loop」を用意しました。
後者はループできるサウンドとなっています。
音源をマテリアルツリーにドラッグ&ドロップしてインポートします。
A01.png
「SE_Maracas_Loop.wav」を選択し、インスペクターにてループ上方の上書きを「True」、ループタイプを「ループ」に設定します。
A02.png
キューを作成します。キューシートを右クリックし、「新規オブジェクト」→「キュー『ポリフォニック』の作成」を選択。
A03.png
マテリアルをキュー内にドラッグ&ドラップして配置します。
A04.png
衝突音、マラカスのループ音それぞれにキューを作ります。
A04b.png
VR空間上では定位のあるサウンドが特に大事です。見た目と物理的に乖離したサウンドが聞こえてくると、人によってはかなり不快な体験となってしまいます。次の設定をしっかり試しておきましょう。
キューを選択し、インスペクターにてパンタイプを「3Dポジショニング」に設定します。
A05.png
聞こえ方を確認します。ツールバーから「セッションウィンドウ」を開きます。
A06.png
キューシートからキューをセッションウィンドウ下部へとドラッグ&ドロップして登録します。
A07.png
セッションウィンドウ上部の「3Dポジショニング」のボタンをクリックします。
A08.png
「プレーヤーに3Dオブジェクトをアタッチ」にチェックを入れます。
A09.png
キューを再生し、緑色の領域内をドラッグしてサウンドを移動させ、聞こえ方を確認してみましょう。
A10.png
調整が必要な場合はキューを選択し、インスペクターの「3Dポジショニング」の項目から詳細な設定が可能です。
A11.png
また、角度に応じたAisacコントロールなどにも対応しています。聞く人の方角によりサウンドが変化していくといったように、立体感のある環境音にも使えるでしょう。
A12.png
調整できたらキューシートをビルドします。
A13.png
A14.png

VRテンプレートからプロジェクトを作り、ADX for UEを導入する

UE5のエディタを起動します。
この記事ではVRプロジェクトのセットアップから行います。プロジェクトが既にある場合は、次のトピックまで読み飛ばしてください。
B01.png
「GAMES」カテゴリの「Virtual Reality」を選択します。
プロジェクト名を入力し、「Create」を押します。
B02.png
エディタが起動します。
B03.png
ADX for UE導入のため、新規にC++クラスを作成します(プラグイン導入時に必要なだけなので、コードを書く必要はありません)。
ツールバーの「Tools」→「New C++ Class」を選択します。
B04.png
「None」を選択して「Next」。
B05.png
そのまま「Create Class」をします。
B06.png
ADX for UEのSDK内にある「Plugin」フォルダをプロジェクトのフォルダへと移動します。
B07.png
プロジェクトを起動します。ダイアログが出た場合は、「Yes」を押してプロジェクトをビルドします。
B08.png

キューをインポートし、鳴らしてみる

コンテンツドロワー(コンテンツブラウザ)の適当な場所にフォルダを作り、AtomCraftでビルドしたacbファイル、acfファイルをドラッグ&ドロップしてインポートします。
その際、ダイアログでは「Yes」を選択します。
B09.png
2つのアセットが作られます。
B10.png
正常に再生できることを確認します。
B11.png
VR空間上での聞こえ方を確かめてみましょう。
「SE_Maracas」をレベル上にドラッグ&ドロップして配置します。
B12.png
Outlinerパネルにて、キューを適当な「GrabActor_StaticMesh_Physics」アクターへとドラッグ&ドロップして親子付けします。
これらのキューブはVRコントローラで掴むことができるため、インタラクションのテストに便利です。
B13.png
子になった「SE_Maracas」の座標を「0.0, 0.0, 0.0」にします。
子になったオブジェクトは親に対して相対的な座標を持つため、原点にしておくと親と同じ座標ということになります。
B14.png
「VR Preview」を起動します。
対象のキューブからループ音が聞こえてくるはずです。手に持ったり、投げたりしてみて聞こえ方を確認します。
キューブの咆哮からサウンドが聞こえてくるでしょうか?
B15.png
B16.png

マラカスを作る

この音の鳴るキューブをちょっとしたおもちゃに仕上げていきます。
動的にピッチ変化をさせたいので、一度AtomCraftに戻り作業をします。
サウンドのパラメータを動的に変更できる「Aisacコントロール」の値を使い、ゲーム中のサウンド操作を行います。
マラカスのキューを選択し、トラックリストの空欄で右クリックして「新規オブジェクト」→「AISACの作成」を選択します。
C01.png
AISACグラフタイプを「ピッチ」に設定し、Aisacを追加します。
C02.png
右肩上がりのグラフを適当に作ります。
「ポイントリスト」タブを使うと、数値を厳密に設定できます。
C03.png
再生し、上部のスライダーを動かしAisacコントロール値の上下に伴うサウンドの変化を確認します。
C04.png
UE5のエディタに戻ります。変更を反映させるため、acbファイルとacfファイルを再度インポートすることを忘れないでください。
キューを子に持つキューブを選択した状態でレベルブループリントを開きます。
C05.png
右クリックし、「Create a Reference to (アクター名)」を選択してリファレンスノードを作ります。
C06.png
Get VelocityVector Lengthで現在の速度がFloat値で取得できます。
C07.png
Set Volume Multiplierノードでマラカス音のボリュームを設定します。Map Range Clampedノードで速度をボリューム値に変換し、キューブが動いている間だけマラカスの音が鳴るようにします。
C08.png
また、Set Aisac Control Valueを使いAisacコントロールを行います。キューブの速度が遅いときは重い音に、速く動かすと軽快な音に変化させます。
C09.png
VRデバイスを被り直すのが面倒だったり、細かいイテレーションを行いたい場合、「Simulate」モードでも物理挙動を確認できます。
C10.png
通常のビューポートと同じようにアクターを選択して動かすことができます。
「Simulate」モードでは物理挙動やロジックも動いているため、マラカスとなったキューブの挙動を確かめることができます。
C11.png

物体がぶつかった際の衝突音を再生する

仕上げに、物理挙動によりキューブが衝突した際のサウンドを再生します。

キューブの「StaticMesh」コンポーネントを選択し、インスペクターにて「Simulation Generates Hit Events」にチェックを入れます。
物理演算により衝突した際のイベントが発火できるようになります。
この工程を行わなくてもロジックは組めますが、イベント自体が発火しないため必ずここにチェックが入っているか確認してみてください。
D01.png
イベントグラフで右クリックし、「Collision」→「Add On Actor Hit」で選択中のアクターの衝突した際のイベントが配置できます。
マラカスにしたキューブと同じものを選択しているか確認しておくと安心です。
D02.png
衝突した際に毎回サウンドを再生していると不自然ですので(落ちてぶつかった跡も細かいバウンドで多数の音が鳴ってしまう)、衝突の強さが一定以上のときのみ処理を行うようにBranchノードで分岐します。
D03.png
Play Sound at Locationでサウンドを再生します。同名のノードがありますが、必ずAtomカテゴリのノードを使います
D04.png
Get Actor Locationでキューブの座標から音が鳴るようにします。対象は衝突元である「Self Actor」です。
D05.png
キューブを放り投げると壁や床、天井にぶつかって音が鳴るようになりました。
D06.png
毎回衝突音が平坦だと違和感がありますので、ピッチやボリュームをランダムに設定するとより自然な聞こえ方になるでしょう。
D07.png

VRでの体験は、プレイヤーの行動にサウンドが伴うことで臨場感がぐっと上がります。少し気を使った演出をして、ゲームの中に入っているという体験を強化してみると良いかもしれません。

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?