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?

More than 3 years have passed since last update.

ADX2+UE4で作る、パーシスタントレベルの切り替えでも途切れないサウンド再生

Last updated at Posted at 2020-10-31

はじめに

アンリアルエンジン4とサウンドミドルウェア「ADX2 for UE4」を連携させ、
ゲーム側での設定に応じて再生する効果音を一括で切り替える実装についてです。

当記事ではUE4.23+「ADX2 LE v2.10.05」を使用します。基本的にブループリントのみでの実装を想定しています。

前提

AtomCraftでビルドしたAtom Cueがあることを前提に進めていきます。AtomCraftの使い方は下記の導入編にあります。
「ADX2 for UE4 LE」を使用します。導入や簡単な使い方は以下の記事にあります。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46

実装

パーシスタントレベルのみを使用する実装

ノードによる、レベルをまたぐ再生処理

普通に音声を再生した場合、Open Levelノードでレベルを切り替えた際に、再生中のサウンドが一括で停止されてしまいます。
01.png
次のノード例ではBGMを再生(Spawn Sound at Location)した直後にレベルを切り替え(Open Level)しています。
この場合、BGM再生直後にロードが入り、音声は途中で途切れてしまうでしょう。
02.png

レベルを切り替えてしまっても再生を続けるには、Create Rooted Atom Componentを使います。
03.png
これだけではAtom Componentをゲーム中に作成するだけなので、Set Soundノードなどで再生したい音声を設定してあげた後、
Playノードで実際に再生を開始する必要があります。
04.png
従って、以下の例ではレベルを切り替えてもサウンドが再生され続けます。
05.png

Rooted Atom Componentの再生を停止する

さて、この場合Create Rooted Atom Componentノードの「Auto Destroy」にチェックが入っていれば再生終了とともにAtom Componentが破棄されますが、手動で再生を停止したい場合一工夫必要です。
生成したAtom Componentの参照は、予め変数として格納しておくか、後でインデックスなどから取得する必要があります。
普通の手段で変数に格納しても、レベルの切り替えと同時に参照が外れるケースが多いです(レベルブループリントやアクターが持つ変数など)。
パーシスタントレベルを切り替えても値を保持するゲームインスタンスなどで変数を保管してしまうのがいいでしょう。

任意のゲームインスタンスクラスがない場合、新しく作ります。
コンテンツブラウザの適当な場所で右クリックし、「Create Basic Asset」→「Blueprint Class」を選択します。
06.png
親クラスを選択するウィンドウが出るので、下部の「All Classes」を押してメニューを拡張します。
07.png
**「GameInstance」を検索して選択します。「Select」を押すとクラスが作成されます。
08.png
名前をつけておきます。
09.png
ダブルクリックして開き、「My Blueprint」パネルで変数を追加します。
10.png
Variable Typeは
「Atom Component」**とします。
11.png
12.png
ツールバーの「Edit」→「Project Settings」を開きます。
16.png
「Maps&Modes」→「Game Instance Class」に作成したゲームインスタンスを指定します。
17.png
これでゲーム中に使用されるゲームインスタンスが設定できました。この中にAtom Componentを格納すれば、レベルを切り替えても値が破棄されなくなります。

Open Levelノードでレベルを切り替える処理に戻ります。
ゲームインスタンスに変数をSetするには、次のようなノードを組みます。
13.png
これを既存の再生→レベル切り替え処理に組み込みます。
少し分かりづらいですが、次の画像のようになります。
14.png
切り替えた先のレベルで、再度ゲームインスタンスを参照しStopノードなどで再生を終了するなどの操作をすることが可能です。
15.png

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?