Help us understand the problem. What is going on with this article?

ADX2 for UE4でゲーム内BGMの曲調切り替え、トラック遷移

はじめに

UE4.23+「ADX2 LE v2.10.05」を使用します。
アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
ゲーム内のシチュエーションに合わせてBGMの曲調を変化させる演出を実装します。

サンプル

こんなのができます。
サンプル
▲画像をクリックしてください。動画に飛びます
蝶をキーボードで操作し画面上の3つのトリガーに進入すると、

  • くぐもった静かな曲調
  • ピアノをメインとした通常の曲調
  • アレンジされたにぎやかな曲調

の3つのトラックにそれぞれシームレスに遷移します。

2020/2/5に開催された「UE4何でも勉強会」にて公開した作例です。
https://ue4allstudy.connpass.com/event/161710/

前提

「ADX2 for UE4 LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46

やること

  • AtomCraftで複数トラックを持つキューを作成
  • UE4にインポート
  • ブループリント処理によるトラック切り替え再生

実装

AtomCraft側

キューの作成

サウンドをインポートし、キューを作成します。
キューシート内で右クリックし、「新規オブジェクト」→『キュー「セレクタによるトラック遷移」』を選択します。
A_00.png

新しくキューが作成されるので、曲調の違うトラックを入れます。
A_01.png
A_02.png
スムーズな遷移を実現するためには、各トラックの再生位置や長さ、テンポを合わせてください。

セレクタの設定

次に、再生するためのトラックを指定するのに使う「セレクタ」を設定します。
この機能については次の記事でも触れています。
「ゲームの状況に合わせて効果音にバリエーションを by ADX2 for UE4」
https://qiita.com/SigRem/items/2c1f497ebf0e981dd43c

プロジェクトツリーの「セレクタフォルダ」を右クリックし、「新規オブジェクト」→「セレクタの作成」を選びます。
A_03.png
新しい「セレクタ」が現れるので、F2キーを押すなどしてリネームします。
A_04.png
リネームしたセレクタを右クリックし、「新規オブジェクト」→「セレクタラベルの作成」を選びます。
A_05.png
セレクタラベルに「TrackA」と名前をつけ、作成します。
A_06.png
同じように「TrackB」、「TrackC」のセレクタラベルも作成しておきます。
A_07.png

トラックにセレクタを設定する

各トラックに、対応したセレクタラベルを付与します。
トラックリストの「なし」と表示されたプルダウンメニューから、先程作成したセレクタ→セレクタラベルを設定します。
A_12.png
3つのトラックについて、それぞれTrackA,B,Cを設定しました。
A_13.png

ビート情報を同期する

この状態で再生ボタンを押して確認……あれ?プレビューが機能しませんね?
「セレクタによるスイッチ遷移」キューでは、ビート同期情報を作成することでプレビュー機能が使用可能になります(このままでもUE4にインポートすれば再生は可能です)。
トラックリストの空欄を右クリックし、「ビート同期情報の作成」をクリックします。
A_08.png
タイムラインに「BeatSync」が現れ、ビートに同期した演出が可能になりました。
A_09.png

「BeatSync」をクリックして選択すると、インスペクターにてBPM情報などが編集できます。予めBGMにあったものを設定しておきましょう。
A_10.png

インスペクターの下部、「ビート同期」をクリックすると複数のビート同期タイミングやビートパターンを編集することが可能です。今回はそのままにしておきます。
A_11.png

bpmが分からない場合

マテリアルのbpmが不明な場合、「BPM解析」で解決できる可能性があります。
マテリアルツリー内で、使用しているサウンドのマテリアルを右クリックし、「BPM解析」をクリックします。
A_20.png
ログにBPM情報が出力されます。
A_21.png
公式マニュアルによると、Wavファイルにのみ使用可能である程度の長さがないと性格な値が出ないとのことです。

トラック遷移の設定

トラックが切り替わるにあたって、クロスフェード(ふたつのトラックを混ぜ合わせて再生)の設定をしてみましょう。
「ワークユニットツリー」で、編集しているキューを選択します。
A_16.png
インスペクターを下にスクロールしていき、「セレクタによるトラック遷移」の項目へ移動します。
ここで遷移タイプや、トラックの切り替わりにかかる時間などを設定できます。
とりあえず画像の通りに入力してみてください。
A_17.png

再生テスト

これでプレビューが可能になりました!
再生ボタンを押して聞いてみましょう。
A_14.png
トラックAのみが流れているはずです。
「プロジェクトツリー」の任意のセレクタラベルをクリックすると、トラックが遷移して曲調が切り替わります。
A_15.png
先ほどの遷移タイミングを調整して、納得いくものができたらビルドに移りましょう。

ビルド

例によって、UE4に持っていくためにキューシートをビルドします。
A_18.png
A_19.png
ここからUE4エディタに移ります。

UE4での実装

インポート

UE4にacfファイルとacbファイルをドラッグアンドドロップし、キューシートをインポートします。
B_01.png

レベルに配置する

コンテンツブラウザからAtom Soundをビューポートにドラッグアンドドロップし、レベルに配置します。
B_03.png

加えて、楽曲に変化をもたらすためのきっかけとなるトリガーを3つ配置します。
B_04.png
このトリガー内にプレイヤーが進入すると、それぞれ違ったトラックが再生されることになります。
B_02.png

イベントの作成

トリガー範囲内への進入を感知してから処理を開始しますので、トリガーからイベントを作成します。
World Outlinerでトリガーを選択します。
B_06.png
右クリックし、「Add Event」→「OnActorBeginOverlap」を選択します。
B_07.png
自動的にレベルブループリントに移動し、イベントが配置されます。
B_08.png

イベントグラフの編集

いったんレベルブループリントのエディタからビューポートに戻ります。
配置したAtom Soundを選択します。
B_09.png
レベルブループリントのイベントグラフで、空欄を右クリックし「Create a Reference to (AtomSound名)」を選択します。
B_10.png
Atom Soundへのリファレンスが作られます。
B_11.png

本格的に処理を組みます。
……といってもこれだけです。詳しい解説は順番にしていきますので、見ながらグラフを組んでみてください。
B_05.png
まずはトリガーが進入を検知する部分です。何らかのアクターがトリガーに入ると、イベントが開始されます。
B_05A.png
Branchノードで、進入したアクターがプレイヤーキャラであることを判別します。
B_05B.png
「Set Selector Label」ノードでBGMに変化を起こします。
セレクタ名は「BGM_Track」、セレクタラベル名は「TrackA」でしたね。
B_05C.png
このノードはAtom Soundのリファレンスから直接作ることができます。
B_12.png

3つのトリガーについて、同じ手順を繰り返し処理を作ります。
B_13.png
指定するセレクタラベルを間違えないように注意!

これで処理は完成です!
3つのトリガーに入った際、違うトラックに遷移していくはずです。
B_14.png
遷移タイミングなど少し違和感を感じる場合は、AtomCraftで再度編集して再インポートしてみてください。

headhigh
オリジナルゲームタイトルの開発、ゲーム開発者向けツール・ミドルウェアのビジネスコンサルティングを行っています。
https://head-high.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした