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で、環境音にタグ付けしてスムーズなサウンドデザインを【GameplayTag活用編2】

0
Last updated at Posted at 2026-06-15

はじめに

ADXアンバサダーとして記事を書いておりますSigと申します。

この記事は、UE5のGameplayTagとADX for UEを組み合わせてサウンドを管理する基礎編の 発展編 です。基礎編では、UE5の機能であるGameplay Tagでサウンドを識別し、DataTable経由で再生する仕組みを作りました。

UE5 + ADXで、サウンドをタグによって管理・再生する

発展編ではその仕組みを活かし、実際のサウンドデザインに使用できる実装を紹介します。
今回の記事では環境音アクターを配置し、それらにタグ付けをしてサウンドを再生する手法を扱います。

基礎編と同じように、後からサウンドの差し替えに対応しやすく、またタグ単位という大まかな設定さえしておけば後でいくらでも調整が効くという利点があります。
また、サウンド配置と実際のサウンドデザインをレベルデザイナーとサウンドデザイナーで分業、という活用もできそうです。

環境音の再生はブループリントから呼び出せるだけでなく、「定期的に一定確率で再生」「不定期に再生」「プレイヤーキャラが近づいたら再生」などの再生トリガーを設定できるよう作っていきます。

当記事では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の導入で、一歩上のサウンド表現を(実践編)

基礎編の仕組みを使用します。先にこちらを参照いただけると行程がイメージしやすいと思います。

UE5 + ADXで、サウンドをタグによって管理・再生する

実装

環境音用のタグとキューを用意する

まずは環境音用のタグを定義します。プロジェクト設定を開きます。
A01.png

「GameplayTags」タブの「Manage Gameplay Tags」からタグのマネージャを開きます。
A02.png

「Sound」タグ下にサブタグを追加していきます。
A03.png

サブタグとして「Ambient」を追加しました。階層は「Sound.Ambient」となります。

A04.png

Sound.Ambient」下に、さらにサウンドの識別となるサブタグを追加します。

例:

  • Sound.Ambient.Bush : 茂みの音
  • Sound.Ambient.Fire : 焚き火の音
  • Sound.Ambient.River : 川の音(ループ)
  • Sound.Ambient.Wind : 風の音

A05.png

AtomCraftでキューを用意する

AtomCraftで素材及びキューを用意します。
マテリアルをインポートします。フォルダ分けしておくと整理しやすいです。
A06.png
川のせせらぎなど、ループさせたい音はマテリアルを選択し、インスペクターにてループ情報の上書きをします。
A06b.png
ワークユニットを右クリックし、「新規オブジェクト」→「キューシートの作成」をします。
A07.png
新しいキューシートに名前をつけます。
A08.png
今回使用するマテリアルをキューシートにドラッグ&ドロップし、それぞれについてキューを作ります。
A09.png

キューシートをビルドし、UE5のコンテンツドロワーにドラッグ&ドロップしてインポートします。

A10.png

タグとキューを紐づけるデータテーブルを開きます。
今回使用するタグとキューの対応表を追加します。

A11.png

環境音再生用アクターを作る

新規にアクターを作ります。
コンテンツドロワーの空欄で右クリックし、「Blueprint Class」を選択。
A12.png
親クラスは「Actor」です。
A13.png
「BP_AmbientSound」と名前をつけました。
A14.png
ダブルクリックして開きます。

キューを再生するため、「Atom Component」を追加します。
A15.png

鳴らす環境音を指定するための GameplayTag 型の変数を追加します。
A16.png

閉じた目玉のアイコンを押し、開いた状態にし変数を公開(Instance Editable)しておきます。
A17.png
データテーブルも変数として作っておきます。
A17b.png
コンパイルし、デフォルト値として入力したデータテーブルを設定します。
ここを差し替えると、別のタグ⇔キュー対応表を使用することもできます。
ゲーム内の舞台となる地域が変わった際に、環境のサウンドを一括で変化させる、といった演出に使用できます。
A17c.png

サウンド再生イベントを作る

イベントグラフにてカスタムイベントを追加します。
A18.png
A19.png

アクターに設定されたGameplayTagからデータテーブルの行を見つけ、対応するキューを再生する処理を書きます。
内容は前回記事のものとほぼ同一です。
A20.png
データテーブルに対応する行が見つからなかった場合のエラーメッセージも出しておくと安全です。
A21.png

レベルにアクターを配置します。
Detailsパネルでは、公開したパラメータとして「Sound Tag」が個別に設定できるようになっています。
ここに再生したいサウンドとなるタグを指定します。
A22.png
現在はカスタムイベントを呼ぶ手段がないため、テスト用としてレベルブループリントから呼んでみましょう。
キーを押してサウンドが再生されたら成功です。
A23.png

定期的に環境音を再生する処理

レベル内で自動的に環境音が再生されるよう処理を組んでいきます。

カスタムイベントを作ります。名前は「PlayPeriodicSound」(定期的なサウンドを再生)としました。
Random Float in Rangeノードで乱数を出し、規定の確率で再生されるようにします。
画像のノードの例では、変数「Play Chance」の確率で再生されます(Play Chanceが0.7なら70%)。
先に作ったカスタムイベントPlay Ambient Soundイベントを呼び出します。
A24.png

Event Begin PlaySet Timer by Eventノードを置き、PlayPeriodicSoundが定期的に呼び出されるようにします。
この場合、「Looping」にチェックをつけて何度も発火されるようにします。
不定期の再生の場合、外します(後述)。
A25.png

不定期に環境音を再生する処理

自然の中の環境音は一定間隔で鳴ると不自然に聞こえます。そこで、処理を少し変えて不定期の再生にします。
この処理は変数の値により定期的な再生としても使えるので、加えて実装しておくといいでしょう。
Set Timer by Eventノードの「Looping」のチェックを外します。
A26.png
Play Periodic Soundイベントの末尾に、再びPlay Periodic Soundを呼び出す処理を入れます。
ここでは変数「PeriodicInterval_Min」「PeriodicInterval_Max」の間からRandom Float in Rangeでランダムな間隔が出るようにします。
A27.png

プレイヤーが近づいたら環境音を再生する処理

お次はプレイヤーキャラクターの接近を検知し、サウンドを再生する処理です。

SphereCollisionコンポーネントを追加します。
B01.png
Construction Scriptを開きます。
My Blueprintか上部のタブから移動できます。
B02.png
変数「SphereRadius」を追加します。
これは接近検知範囲の半径になります。値が「0.0」のままだと機能しませんので、コンパイルして「200.0」などの適当な数値を入れておいてください。
B03.png

SphereCollisionコンポーネントを右クリックし、「Add Event」→「Add OnComponentBeginOverlap」でコリジョンに重なった際のイベントを追加します。
B04.png
重なったのがプレイヤーキャラクターであるか判別し、TrueならPlayAmbientSoundでサウンドを再生します。
B05.png

これで処理はできているのですが、現状だと検知範囲ぎりぎりの場所を反復横跳びするだけで連続でサウンドが再生されてしまうことになります。
それを改善するため、もうひとつSphereCollisionコンポーネントを追加します。
既存のものを「InnerSphere」、新しいものを「OuterSphere」とします。
OuterSphereはInnerSphereより大きく、「InnerSphereに入ればサウンド再生し、OuterSphereから出れば再度再生許可フラグが立つ」という形で連続再生を阻止します。
B06.png
Construction Scriptでそれぞれの半径を反映します。
B07.png
変数「bAllowPlay」を追加します。再生許可フラグです。
B08.png
コンパイルし、デフォルト値をTrueにします。
B09.png
InnerSphereにプレイヤーが進入するとサウンドを再生し、「bAllowPlay」をFalseにし再び再生されないようにします。
B10.png
OuterSphereコンポーネントを右クリックし、「Add Event」→「Add OnComponentEndOverlap」を選び退出時イベントを配置します。
B11.png
こちらでは退出時に「bAllowPlay」をTrueにします。
B12.png

配置されたサウンドごとにトリガーを変える

これらの処理をひとつのアクターで使い分けられるよう、再生タイプを設定できるようにしてみます。

コンテンツドロワーで右クリックし、「Blueprint」→「Enumeration」を選択します。
C01.png
名前を「EAmbientSoundPlayType」としました。
C02.png

ダブルクリックして開き、要素を追加します。
C03.png
それぞれ外部から呼び出す想定の「Event」、定期的なイベントにより再生が発火する「Periodic」、プレイヤーが近づくことで再生される「SphereTrigger」としました。
この内「Event」は便宜的なもので、アクター単体では再生を発火しません。あくまで外部のアクターやロジックから呼び出すものとなります。
C04.png
「BP_AmbientSound」を開き、変数を追加します。型は先ほど作った「EAmbientSoundPlayType」です。
C05.png
それぞれのイベント前に、該当する再生タイプであるかを判定します。
C06.png
C07.png

これで基本的なGameplayTagによる環境音の再生処理が完成しました。

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?