2
1

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でインタラクティブミュージック(ブロック再生編)

2
Last updated at Posted at 2020-06-30

はじめに

ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではアンリアルエンジン5とサウンドミドルウェア「ADX for UE」を連携させ、
ゲーム中の展開に応じてBGMがシームレスに変化していく「インタラクティブミュージック」を実装します。

以前執筆した記事でもインタラクティブミュージックを扱っていますが、

ADX + UE5でインタラクティブミュージック(AtomCraft編/新バージョン対応)

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

これらがトラックのパラメータを調整してBGMを遷移させているのに対し、今回はADXの「ブロック再生」機能により、曲の再生位置をダイナミックに変化させ、BGMの展開を変化させる方法を取ります。

C01.png

普通にBGMを再生するとAメロ→Bメロ→サビといった通常の進行をしますが、Aメロ→サビ(何度かループ)→Aメロ→Bメロといったように変則的な進行が可能になります。

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

前提

ADX for UEの導入や基本的な使い方は以下の記事にあります。必要に応じて参照してください。
ADX for UEの導入で、一歩上のサウンド表現を(導入編)

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

この記事での実装目標

  • 曲のイントロが終わるとゲームを監視し、BGMを変化させる処理に入る
  • キャラクターが一定のエリアに入るとBメロやサビに遷移する
  • ゴールまで辿り着くとアウトロを一度だけ流し、再生を終了する

実装

AtomCraftでBGMを構成する

素材の用意

まずはAtomCraftでBGMを構成し、UE5で変化させるための準備をします。
今回はBGM素材を用意しましたので、もしすぐに試せる音源がない場合使ってみてください。
https://drive.google.com/file/d/12FlChB751am1Gp-KwbU9Q-Jq6_MH3N--/view?usp=sharing

素材のインポート

音源をマテリアルツリーにインポートします。
A01.png

上記の素材では曲の展開ごとにファイルがばらばらになっていますが、後述する「ブロック再生」機能の設定をすれば、ひとつに繋がったBGMファイルでも問題ありません。

キューの作成

新規にキューを作成します。今回は「ポリフォニック」タイプにします。
A02.png

トラック、ブロックの設定

タイムラインにマテリアルをドラッグアンドドロップし、トラックを作成します。
A03.png

そのままトラックリストの空欄で右クリックし、「新規オブジェクト」→「ブロックの作成」を選びます。
A04.png

「ブロック」が生成されたので、選択してインスペクターで名前を分かりやすいものに設定しておきます。
A05.png

ブロック」は、「Aメロ」「Bメロ」「サビ」のように楽曲の区切りとして使用できるものです。
ブロックごとに遷移先を動的に指定したり、何度ループしてから次のブロックに移るかなどを設定することができます。
インスペクターで「ブロックループ回数」に「1」と入力して再生(F5)すると、一度だけブロックが繰り返されてから停止します(テスト再生はF6キーで停止できます)。
A06.png

2番目の楽曲ファイルをタイムラインに追加すると、新しくブロックが生成されます。
こちらも分かりやすい名前にしておきます。
A08.png

また、ブロックの始端、終端をフレーズと同じ長さになるよう調整します。
A08B.png

同様にすべての楽曲ごとにトラック、ブロックを作成します。
今回はブロックを「イントロ」「Aメロ」「Bメロ」「サビA」「サビB」「アウトロ」と分けました。
A09.png

最初のブロックで試しに設定したループ回数は0に戻しておきます。
A10.png

ブロックの遷移先指定

ブロックが適切にループと遷移ができるよう設定していきます。
「ブロックループ回数」を「-1」にすると、プログラム側で遷移先を設定しない限り無限にループ再生されます。
ゲームにおいては、状況が変わらない限り同じ箇所を再生し続けてほしい場合などに便利です。
A13.png

Block_Intro(イントロ)

ブロック遷移先: 次のブロック
ブロックループ回数: 0
イントロは一度再生すると、Aメロに遷移します。

Block_A(Aメロ)

ブロック遷移先: なし
ブロックループ回数: -1

Block_B(Bメロ)

ブロック遷移先: なし
ブロックループ回数: -1

Block_C(サビ前半)

ブロック遷移先: 次のブロック
ブロックループ回数: 1

Block_D(サビ後半)

ブロック遷移先: ブロック遷移先指定(後述)
ブロックループ回数: 1

Block_Outro(アウトロ)

ブロック遷移先: なし
ブロックループ回数: 0

サビでは前半、後半をそれぞれ2回繰り返し演奏した後、サビの最初にループさせます。
Block_C(サビ前半)からはBlock_D(サビ後半)に遷移し、
Block_DからはBlock_Cに遷移します。

Block_DからBlock_Cに戻るには、「ブロック遷移先指定」を使用します。
まずはインスペクターで「ブロック遷移先」を「ブロック遷移先指定」に設定し、
A14.png
「ブロック」の項目で遷移先のブロック名に「Block_C」を指定します。
A15.png
これでサビのループが完成します。

ブロックの分割

ゲームの展開が速い場合、状況の変化に対してブロック遷移が遅すぎるためにBGMがついてこれない場合があります。
「ブロック分割数」を多めに設定し、「ブロック遷移タイミング」を「指定分割で」に設定することで、BGMのテンポに合わせて遷移するというルールは守りつつ、遷移タイミングを増やすことができます。
A16.png

「ブロック遷移タイミング」を「即時」にすると、遷移が即座に行われますがテンポに違和感が生じることがあります。

キューシートのビルド

ひとまず、ここまででキューシートをビルドしておきます。
A11.png
A12.png

UE5でインタラクティブミュージックを実装する

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

ビルドしたキューシート(acf,acbファイル)をコンテンツブラウザ(コンテンツドロワ)にドラッグアンドドロップし、インポートします。
その際に表示されるダイアログでは、どちらも「Yes」を選択します。これにより、プロジェクト設定が自動的に設定されます。
B01.png
B02.png

AtomConfigとキューシートがアセットとしてインポートされたことを確認します。
B03.png
キューシートを開き、正常に再生されることを確認しておきましょう。
B04.png

レベルを作成する

今回、デフォルトのアセットを使用してこんな感じのレベルを作りました。
B05.png

楽曲と連動する要素として、以下のように想定します。
B06.png

B07.png

レベルができたらコンテンツブラウザからキューをドラッグアンドドロップして配置します。ひとまずこれで再生はされるはずです。

各エリアに進入したことを感知するため、部屋をカバーできるように「Trigger Volume」を置きます。
C01.png
C02.png

各エリアに対してトリガーを置き、調節します。
C03.png

キューを再生し、変数として登録します。
キューを選択した状態でレベルブループリントを開きます。
C04.png
イベントグラフで右クリックし、「Create a Reference to (アクター名)」を選択してリファレンスノードを作ります。
C05.png
リファレンスノードのアウトプットピンを右クリックして「Promote to Variable」を選択して、変数を作ります。
変数化することで、ブループリントから容易にアクセスすることが可能になります。
C06.png
Event Begin Playと線をつなげ、レベル開始時にこの処理が走るようにします。
C07.png

ブロックを遷移させる

実際にブループリント側からブロックを遷移させていきます。

レベル上のトリガーボリュームを選択した状態でレベルブループリントを開きます。
D01.png
イベントグラフで右クリックし、「Add On Actor Begin Overlap」を選択します。
D02.png
アクターがこのボリュームに進入した際のイベントができました。
D03.png

Branchノードを使い、プレイヤーキャラが進入したときのみ処理を継続します。
D04.png
ブロックの遷移先はSet Cue Next Block Indexノードで指定します。
ここではBメロに移行してほしいので、「Block Index」は「2」です。
D05.png
すべてのトリガーボリュームに対し、同じように処理を書いていきます。
D06.png

これで完成です!
ゲームを再生し、動作を確認してみましょう。
イントロからAメロへの移行、各エリアでのブロックの遷移、サビの特殊なループなどが体験できるでしょうか?
D07.png

ADX for UEの新バージョンにおいて機能が増え、ブループリントでの処理を最小限に抑えて多彩な演出が可能になりました。
ぜひゲームの重要な場面においてブロック遷移を活用し、シーンとシンクロした演出をしてみてください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?