はじめに
ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではアンリアルエンジン5とサウンドミドルウェア「ADX for UE」を連携させ、開発中のサウンド差し替え・変更に強くなるUE5上の管理の方法を紹介します。
開発中では、AtomCraft上でキュー名を変えたり、キューを別のキューシートに移動させたりといった変更が頻繁に発生します。
このとき、UE5側でBPに直接キューシート及びキューのアセット参照を指定して実装していると、変更されたキューを差し替えるため、該当箇所をすべて探して直す必要が出てきます。プロジェクトが大きくなるほど、AtomCraftでの何気ないデータ変更がゲーム実装側に大きな影響を与えるようになっていきます。
そこで、AtomCraftでのサウンドデザインの幅を損なわず、かつキュー名変更などをしてもUE5側への影響が少なくて済む実装を紹介します。
たとえば以下のような状況で役立ちます。
- AtomCraftでのCue名変更・CueSheet間移動が頻繁に発生する、初期開発フェーズ
- 仮素材しかないが、テストプレイで印象を判断したい
- 本番素材が届いたときに、スムーズに差し替えたい
- (同じ素材でテストをするのに飽きた……)
記事中に「blueprintue」を使用したBPグラフ共有を載せています。コピペすることで大体の実装ができますので、よろしければご活用ください。
当記事ではUE5.7 及び 「ADX LE UE SDK(2.05.01)」を使用します。
また、基本的にブループリントのみでの実装を行います。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
前提
「ADX for UE LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX for UEの導入で、一歩上のサウンド表現を(導入編)
ADX for UEの導入で、一歩上のサウンド表現を(実践編)
実装
プレースホルダー(仮置き)サウンドを使う
プレースホルダー(仮置き)サウンドを作る上でも、
- 体験の手触りがわかるミックスバランスになっていること
- 仮音の繰り返しでプレイヤーが飽きにくいこと
- 本番素材が届いたときに差し替えやすい構造であること
ができていれば機能します。これらをADX for UEの機能で実現していきます。
AtomCraftで「使い回し前提」のキューを作る
仮音は少ない素材を使い回すことになるため、AtomCraft側でランダム性を仕込んでおくと飽きにくくなります。
今回は1つの短い仮音素材「SE_Generic.wav」を使い、攻撃音の仮素材として使い回す想定で組んでみます。
マテリアルをインポートします。
キューシートを右クリックし、「新規オブジェクト」→「キュー『ポリフォニック』の作成」を選択します。
キューに仮音素材をドラッグ&ドロップし、トラックを作成します。今回はキューにランダムパラメータを仕込むことで「鳴るたびに少しずつ違う音」にしていきます。
ちなみに、異なる仮音素材を複数用意してローテーションさせたい場合はキュータイプを「ランダムノーリピート」に変更し、複数トラックにそれぞれ異なる素材を配置すると、同じトラックが連続して鳴らない動作が作れます。
例えば足音やヒット音の仮素材を5種類用意して交互に鳴らしたい、というシチュエーションに有効です。
また、ランダムな音を流しながら一番しっくりくる音を探す、という手法にも活用できます。
ピッチとボリュームにランダム幅をつける
トラックのインスペクターで、ピッチとボリュームのランダム幅を設定します。以下のように設定しました。
- ボリュームランダム: 0.5
- ピッチランダム: 1000
これらは+-にまたがるランダム幅となります。
これだけで再生のたびに音が少しずつ変わり、繰り返しの違和感が大きく軽減されます。
ここまでできたらキューシートをビルドします。
UE5にサウンドを組み込む
UE5でビルドしたキューシートをインポートします。
acfファイルインポート時のダイアログでは両方とも「Yes」を選択します。
これにより、プロジェクトに自動的にAtomConfigが設定されます。
設定次第ではダイアログが出ないこともあります。
キューが正常に再生されることを確認します。
差し替えやすい再生設計を作る
本番素材への差し替えやCue名変更を一箇所で吸収するため、DataTableでキューを管理する構造にします。
DataTableの作成には、データの構造規格となるStructure(構造体)が必要です。
構造体「FSoundEntry」を新規作成します。
ダブルクリックして開き、変数を追加します。
- SoundCue: Atom Sound Cue型
DataTableを新規作成します。
構造体に「FSoundEntry」を指定します。
「DT_Soundlist」と名前をつけました。
行を追加します。
DataTableの行の名前を編集します。後で指定することになるので、分かりやすい名前がいいでしょう。
共通の再生関数を作る
Blueprint Function Libraryを作成します。
これは様々なグラフから呼び出すことができる汎用の関数を登録できるものです。
「BFL_SoundUtility」と名前をつけ、ダブルクリックして開きます。
必要な引数はName型の「SoundKey」です。
ローカル変数を追加します。
これはこの関数の中でのみ扱える変数になります。
DataTableを読み込みたいので、「DataTable」型の変数を追加します。

コンパイルし、Default Valueとして先ほど作ったデータテーブルを指定します。

データテーブルの変数をGetし、そこからGet Data Table Rowノードを配置します。

「Out Row」のアウトプットピンから、データテーブルの構造体を分解します。
「Break FSoundEntry」を選択します。

構造体から取得したAtom Sound Cueを再生するため、Spawn Sound 2Dノードを配置します。
必ずAtomカテゴリのノードを使用します。

ノードをつなげて再生処理は完成です。

DataTableに登録がないキーでも、フォールバックとして仮音を鳴らす
仮に再生しようとしているキーについてのデータがない場合、通常何も音が再生されません。
それを防ぐため、データが取得出来なかった場合、フォールバックとして仮音を再生する処理を追加します。
Get Data Table Rowノードには、行が見つかったときに発火するRow Foundピンと、見つからなかったときに発火するRow Not Foundピンの2つがあります。
Row Not Foundピンからの出力で、仮音をSpawn Sound 2Dで再生します。
さらに、フォールバックが鳴ったことを開発者が把握できるよう、Row Not Found側でPrint Stringを使って「Sound key not found: (再生を試行したキー名)」のようなデバッグメッセージを表示しておくと安心です。
この仕組みを入れておくと、未割り当ての音があることにすぐ気づけます。
また、修正時にロジックを編集する必要がないので、サウンドデザイナーだけでも修正処理を完了させることができます。
このブループリントグラフはこちらからコピペできます。
ゲーム側から共通関数を呼ぶ
プレイヤーキャラクターのBPで、攻撃アクションからPlaySound関数を呼び出します。
Blueprint Function Libraryに登録した関数は、こうして様々な場所から呼び出す事が可能になります。
ゲームを再生し、仮音が攻撃のたびに少しずつ変化しながら再生されることを確認します。
AtomCraftでCueを変更したときの対応
AtomCraftでデータの更新があった場合のワークフローはこのようなものになります。
- AtomCraftで変更を行い、キューシートをビルド
- UE5でキューシートを再インポート
- UE5のDataTableの該当行で、キュー参照を新しいものに指定し直す
ゲーム側のBP配線は変更する必要がありません。BPではキー名しか参照しておらず、実際のキューアセットへの参照はDataTableから取得しているためです。
プロジェクトが大きくなるほど、変更を一箇所に閉じ込められるメリットが大きくなるでしょう。
本番素材への差し替えを試す
本番素材が用意できた際の差し替え手順は次のようになります。
- AtomCraftに素材をインポート
- 既存のキュー内のマテリアルを本番素材に差し替える(またはキューを新規作成して差し替える)
- キューシートをビルドし、UE5に再インポート
- UE5のDataTableの該当行で、キュー参照を本番のものに更新
ゲーム側のブループリントグラフは変更不要です。
これでUE5とADX for UEを使い、AtomCraftでのサウンド更新にUE5側が柔軟に対応できる再生処理ができました。
仮音から自然に最終版のサウンドへの差し替えも可能なので、開発を通して長く役立つ実装になりそうです。
補足編
別の情報と一緒にキューを管理する
この記事ではStructureに「Atom Sound Cue」だけを持たせましたが、Structureに変数を追加することで、Cueと一緒に別の情報を管理することもできます。
たとえばノベルゲームでは、台詞テキスト、話者名、ボイスなどのキューを1つのStructureにまとめてDataTableで管理することで、スプレッドシートで台詞データを編集する制作フローが構築できます。
この発展については別記事で詳しく扱っています。
UE5 + ADXでつくる、ノベルゲームの台詞・ボイスデータの管理Tips
ノベルゲーム以外にも、効果音にカテゴリ情報やランダム再生用のグループ情報を持たせるなど、Structureを拡張することで様々な応用ができます。



























