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でスマートに実装する、機械などの駆動サウンド

0
Last updated at Posted at 2026-05-11

はじめに

ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではUE5とADX for UEを連携させ、マーカーとAisacコントロール機能を使用し、ループが絡むサウンド操作を実装します。

「駆動開始する音」、「駆動中の音(ループ)」、「駆動停止する音」の3要素に分解し、順番に再生していきます。
また、駆動中のサウンドは速度などによって音色が変化していく実装も行います。

使用例として、

  • エレベーターの駆動音
  • 乗り物のエンジン音
  • サイレン
    などが想定されます。人工的な音全般で使えるテクニックになります。

やること

  • AtomCraftで駆動音を構成する
  • AtomCraftでマーカーやAisacコントロールを設定する
  • サンプルとして、UE内で簡易なエレベーターを作成する
  • Blueprintでサウンドを再生する
  • Blueprintでサウンドを操作する

また、記事中に「blueprintue」を使用したBPグラフ共有を載せています。コピペすることで大体の実装ができますので、よろしければご活用ください。

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

前提

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

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

ADX for UEでつくる、エリアごとの音響

AtomCraftでサウンドを構成する

まずはサウンドオーサリングツール「AtomCraft」でサウンドを構成していきます。

キューの作成

「駆動開始する音」、「駆動中の音」、「駆動停止する音」を用意しました。
すべてマテリアルツリーにインポートします。
駆動中の音はループさせますが、マーカー機能を使用してループさせるので今回はここで設定する必要はありません。
A01.png
キューシートを右クリックし、「新規オブジェクト」→「キュー『ポリフォニック』の作成」を選択します。
A02.png
このキューは駆動開始、駆動中のサウンドを連続して再生します。
A03.png
キュー内に対応するマテリアルを続けて配置します。
A04.png
駆動停止の音には専用のキューを作り、配置します。
A05.png

マーカーの配置

駆動開始、駆動中のサウンドのキューを開き、トラックリストの空欄で右クリックして「マーカーの作成」を選択します。
A06.png
これはキュー内の任意のタイミングに「マーカー」を配置し、様々な処理を行うものです。
タイプは「シーケンスループ」を選択します。
A07.png
ループの両端がマーカーとして配置されるので、ドラッグして移動させます。
駆動音のループ期間を指定します。
A08.png
再生ボタンを押し、正常にループされるか確認してみましょう。
A09.png

Aisacコントロールの設定

Aisacコントロールを追加します。
今回は駆動する速度が速くなるほどピッチが高くなり、機械が激しく動いている様子を演出します。

トラックリストの空欄で「AISACの作成」を選択します。
A10.png

AISAC名を設定し、AISACグラフタイプを「ピッチ」にします。
A11.png
AISACタブに切り替えます。
A12.png
グラフを編集します。
右側の「ポイントリスト」で数値を設定してもOKです。
A13.png

キューシートのビルド

ここまでできたらキューシートをビルドします。
A14.png
A15.png

UE5でサウンドを実装する

ここからはUEのエディタを使用します。

キューシートのインポート

エクスポートしたacbファイル、acfファイルをコンテンツドロワーにドラッグ&ドロップしてインポートします。
その際に表示されるダイアログでは「Yes」を選択します。
これにより、プロジェクトにAtomConfigが設定されます。
B01.png
コンテンツドロワーにアセットが作られます。
B02.png
キューシートアセットを開き、再生されることを確認しておきましょう。
B03.png

簡易なエレベーターを作成する

移動するエレベーターを用意します。ロジックで動かしてもいいですし、シーケンサーで動作を決め打ちしてしまう方法もあります。
今回の実装例ではシーケンサーで稼働させます。
メッシュが上下に移動するだけのタイムラインを用意しました。
C01.png
シーケンサーを使う上での注意点として、再生終了時の挙動を設定しておくことをおすすめします。
「Transform」トラックを右クリックし、「Edit Section」→「When Finished」を「Keep State」に設定します。デフォルト設定では再生終了後、メッシュが元の位置に戻ってしまう挙動をすることがあります。それを防ぐための手法です。
C02.png

レベルシーケンスを選択した状態で、レベルブループリントを開きます。
C03.png

キーを押したらレベルシーケンスが再生され、エレベーターが動き出すような処理を作っていきます。
まずはInput Keyノードを配置します。
エレベーターを上下させるため、「1」キーと「2」キーのノードを作りました。
C04.png
右クリックし、レベルシーケンスのリファレンスノードを配置します。
C05.png
それぞれ、Playノードと逆再生させるPlay Reverseノードを配置して繋げます。
C06.png
テストしてみましょう。簡素な見た目ですが、最低限エレベーターの昇降になっていると思います。
C07.png

Blueprintでサウンドを再生する

レベルにキューを配置します。
「ADX」→「Atom Ambient Sound」を選択。
D01.png
このキューはエレベーターに追従させて再生したいので、OutlinerパネルでAtom Ambient Soundをドラッグ&ドロップしてエレベーターのメッシュ(BPアクターでも可)の子にします。
D02.png
Outlinerパネル上ではこのような表示になっていればOKです。
D04.png

シーケンサーを動かし、正常に追従することを確認します。
D05.png

Detailsパネルで再生するキューを指定します。エレベーターの再生開始・ループ音のキューです。
D08.png
ゲーム開始時に自動で再生されないように、「Auto Activate」のチェックを外しておきます。
D09.png

レベルブループリントに戻ります。
D06.png

レベルシーケンスの再生と共に、AtomAmbientSoundもPlayで再生します。
D07.png

Bind Event to On Atom Sound Finishedノードを配置します。
D14.png
これはキューの再生終了を検知できるノードで、それをトリガーにして別のイベントを発火できます。
D15.png

赤いアウトプットピンから線を伸ばし、カスタムイベントを追加します。
D10.png
カスタムイベントの内容はこんな感じです。
Fade Outノードで駆動音を止め、Play Sound at Locationでエレベーターのキュー位置で停止音を再生します。
D11.png

エレベーターが動き出すとサウンドが再生され、駆動中はループします。
エレベーターが止まるとループサウンドが停止され、エレベーターの停止音が再生されます。
D12.png

また、逆再生側のノードも線を伸ばして合流させます。
D13.png

Blueprintでサウンドを操作する

BlueprintからAisacコントロールを操作し、駆動中のサウンドを変化させます。
エレベーターが駆動中であることを判別するBool型変数「bElevatorMove」を追加します。
E01.png
エレベーターの駆動開始・終了時に変数をSetします。
E02.png
Event Tickから、エレベーターが駆動中であればSet Aisac Control ValueでAisacコントロールを実行します。
E03.png
操作対象のAisacコントロールを指定します。群青のアウトプットピンを右クリックし、「Promote to Variable」で変数化します。
E04.png
コンパイルし、初期値を指定します。AtomCraftでカーブを作ったAisacコントロールを選択します。
E05.png
エレベーターの速度を取得し、Aisacコントロールの値に変換します。
まずはGet Velocityで速度を取得します。
Vector Lengthノードで線形の速度を得ることができます。
この方法なら上下方向の移動だけでなく、斜めに移動するエレベーターや横方向に移動するリフトなどの足場にも応用可能です。
E06.png
Map Range Clampedで、速度の基準を設定した上でAisacコントロールに渡す「0.0~1.0」の値に変換します。
この例では「0~500ユニット」の速度を「0.0~1.0」に変換しています。
Map Range Clampedノードなら、「Out Range A」と「Out Range B」が上限値と下限値になるため想定外の数値が渡されないので安全です。
E07.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?