2
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?

ADX + UE5でインタラクティブミュージック(ブループリント編)

Last updated at Posted at 2019-11-27

はじめに

ADXアンバサダーとして執筆しておりますSigと申します。
アンリアルエンジン5と、サウンドミドルウェア「ADX for UE」を連携させ、ゲームの状況によって変化するBGMをセットアップする記事です。
ゲームの臨場感づくりに一役買うでしょう。
UE5.2+「ADX LE UE SDK(2.00.00.00)」を使用します。

前提

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

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

AtomCraftで用意したサウンドデータを使用します。
AtomCraftの使い方については前編「ADX for UEでインタラクティブミュージック(AtomCraft編)」をご覧ください。

やること

  • UE5にインポート
  • ブループリントでパラメータを操作
  • BGMのトラックごとにフェードイン・フェードアウトができるようにする
  • テストプレイ

UE5でのセットアップ

ADX for UEプラグインを導入したUE5プロジェクトを開きます。

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

ビルドしたacfファイル、acbファイルをインポートします。

acfファイルをインポートした際のダイアログでは、両方とも「Yes」を選択します。
A01.png
A02.png
コンテンツブラウザにacfファイル、acbファイルがあることを確認します。
A03.png
キューシートアセットを開き、キューが再生できることも確認しておきましょう。
A04.png

とりあえずレベル上に配置してみて、プレイ開始したらサウンドも再生されることをテストしておきます。
A05.png

AISACコントロールの初期値設定

レベル上に配置したキューは、初期ではAISACコントロールの値がすべて「1.0」になっているようです。
この初期値を個別に設定してみましょう。
レベルに配置したキューを選択し、Detailsパネルを参照します。
「AISAC」内の「Control Modulations」の場所にある+ボタンを押し、項目を追加します。
A06.png
「Control」を「AisacControl_00」にし、値を「0.0」に設定すればトラック1のボリュームが0になり、曲調が変化します。
A07.png
同じように項目を追加していけば、他のトラックの音量(他のAISACコントロール)も初期値が自由に設定できます。
A08.png

BPからの操作

テスト用レベルの作成

今回はBGMの変化が効果的にテストできるよう、こんなレベル(マップ)を用意しました。
B01.png

スタート地点ではAパートのみ再生されており、少し進むとBパートがフェードインし、ゴールに近づくとCパートも加わります。
B01B.png
Bパートエリア、Cパートエリアに入ったことを感知するため、Trigger_Volumeを配置します。
「Quickly add to the project」ボタンから「Volumes」→「Trigger Volume」です。
B02.png
Detailsパネルの「Brush Settings」で大きさを整え、レベル上の目的の位置に配置します。
B03.png
同じようにボリュームを配置します。
名前は「Trigger_Bpart」、「Trigger_Cpart」としておきましょう。
B04.png

レベルブループリントを開く

エディタ上部より「Open Level Blueprint」でレベルブループリントを開きます。
C01.png

**「Event Begin Play」**ノードを置き、プレイ開始時の処理を作ります。
C02.png

まずBGMはAパートだけ鳴っている状態にしたいので、B,Cパートのボリュームを0にする処理を書いてみましょう。
ボリュームを操作するには、先程Atom Craftで作成したAisacコントロールが必要になってきます。
ビューポートに戻り、配置した「IMLoop」を選択しておきます。
C03.png

レベルブループリントエディタで右クリックし「Create a Reference to IMLoop」を選択します。
C04.png

「IMLoop」を参照するノードができました。
C05.png

このノードの青いピンから線を伸ばし、「Set Aisac Control Value」ノードを配置します。
C06.png
C07.png

このノードでAisacコントロールへと好きな値を渡すことができます。

ADX for UEのバージョン2からは、AisacControlの指定はノードを使って行うようになりました。
変数を作り、複数の場所でAISACコントロールを使い回せるようにしてみましょう。

Set Aisac Control Valueノードの青いインプットピンを右クリックし、「Promote to Variable」で変数を作成します。
C08.png
変数には「Aisac_01」と名前をつけます。
C09.png
変数の初期値を設定するため、左上の「Compile」ボタンを押してコンパイルします。
C10.png
変数を選択し、「AisacControl_01」を指定します。
C11.png
これでゲーム開始時に、Bパートのボリュームを0にする処理ができました。
C12.png
同じようにノードと変数(初期値はAisacControl_02)を作り、Cパートのボリュームも0にします。
C13.png

ここで一旦コンパイル&テストプレイし、BGMがAパートだけ鳴っているか確認します。

タイムラインの作成

BパートやCパートを再生する際、いきなり音量が大きくなるのでは風情がないので、1秒間かけて段々と音を大きくする「フェードイン再生」をさせることにします。
数値を段々と変化させる方法はいろいろありますが、今回はブループリントの「タイムライン」を使ってみましょう。
レベルブループリントエディタで、ノードを置く際と同じように「Add Timeline」を選択します。
D01.png
タイムラインノードが出現します。「TL_BPart_FadeIn」などの名前をつけておきましょう。
D02.png

タイムラインの編集

タイムラインノードをダブルクリックすると、タイムラインの編集画面に入ります。
D03.png
上部のタブを切り替えることでもとのレベルブループリントに戻ることができます。
今回はボリュームをfloat値で変動させたいので、「+Track」ボタンから「Add Float Track」を選択し、float値のグラフを作ります。
D04.png
適当な名前をつけておきましょう。
D05.png
グラフ上で右クリックするとポイントを作ることができるので、0秒の際に数値を0、一秒の際に数値を1にするよう編集します。
D06.png
数値を直接入力すると便利です。
D07.png
ポイントを選択して右クリックすると、カーブタイプを選ぶこともできます。
D08.png
遷移時間は1秒間なので、「Length」の値を1.00にしておきます。
D09.png
ここまでできたら「Event Graph」のタブを押してレベルブループリントの編集に戻ります。

ノードの組み立て

タイムラインの値を「Set Aisac Control Value」ノードに渡したいので、ふたたび一連のノードを配置します(コピペしても大丈夫です)。
Timelineノードから線をつなぎ、以下の画像のように構成します。
E01.png
Timelineノードの「Update」から線をつなぐと、タイムライン上で数値が変更されるごとに処理が実行されます。
「Finished」から線をつなげば、タイムラインの再生が終わった際に処理が実行されます。
「BpartVolume」の黄緑色の線も忘れずに「Set Aisac Control Value」ノードの「Value」ピンにつないでください。

さて、この処理を行う(タイムラインを再生開始する)ためのイベントが必要です。ビューポートでBパートの再生開始トリガーである「Trigger_Bpart」を選択します。
E02.png
レベルブループリント上の空欄で右クリックして、「Add Event for Trigger」→「Collision」→「Add On Actor Begin Overlap」を選択。
E03.png

レベルブループリント内にイベントが追加されました。これはトリガー内にアクターが進入した際に実行されます。
E04.png

進入したアクターがプレイヤーキャラクターである(プレイヤーキャラクターと同一である)ことを判別するため、以下の画像のように「Branch」「Get Player Character」「==(イコール)」ノードを置きます。
E05.png

一連の処理がつながるよう、線をつなげます。
E06.png

これでBパートのフェードイン処理は完成です。

同じようにCパートのフェードイン処理もつくります。ほとんどはコピペでお手軽に複製できます。
イベントは「Trigger_Cpart」を選択して作ること、タイムラインノードの名前は変えておくこと、「Set Aisac Control Value」ノードの「Control Name」は「AisacControl_02」にしておくことを忘れずに!
E07.png
こちらはノード全体図です。うまくいかない場合、見比べてみてください。
E08.png

ここまでできたらテストプレイして確認してみましょう。一定の区画に入った際、フェードイン処理が起こるでしょうか?
E09.png

フェードアウト処理

このままではトリガーから離れてもBGMは賑やかなままですので、フェードアウト処理を作ります。
World Outerlinerで「Trigger_Bpart」を選択し、イベントグラフの空いている場所で右クリックし「Add Event for Trigger」→「Collision」→「Add On Actor End Overlap」を選択。
F01.png
F02.png

フェードイン処理と同じようにグラフを組みます。
今度は、Bパートのフェードインに使ったタイムラインの「Reverse」ノードにつなげます。「Reverse」ピンが実行されると、タイムラインは逆再生されます。
F03.png

フェードイン処理が途中でも逆再生にシフトするので、スムーズな変化が可能になります。
強制的にタイムラインの最初から再生したい場合は、「Play from Start」や「Rverse from End」ピンを使ってみましょう。
Cパートのフェードアウト処理も同じように組むと、下記の画像のようになります。
F04.png
これでフェードイン・アウト処理が完成し、現在の位置によって変化するBGMが完成しました。

その他

楽曲全体のフェードイン

プレイ開始時にBGM自体もフェードインすると、より自然な雰囲気になります。
Event Begin Playから続く処理に、新しく作成したタイムラインとSet Volume Multiplerノードを加えます。
G01.png
タイムラインはほぼ同じですが、フェードイン時間を長く持ちたいため2秒に伸ばしました。
G02.png

2
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
2
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?