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 1 year has passed since last update.

ADX+UEでサウンドの配置作業を効率化する(基本編1)

Last updated at Posted at 2022-06-10

はじめに

アンリアルエンジン4とサウンドミドルウェア「ADX for UE4」を連携させ、サウンドの配置作業などを効率化してみます。
UEのエディタユーティリティ機能を使用し、自分でエディタを拡張していくイメージです。
A_00A.png
処理は通常のブループリントと同じ感覚で書くことが可能です。
これを使うことで、自分以外のデザイナーがコードやBPをいじらずとも、レベル上のサウンドをデザインすることができます。

前提

当記事ではUE4.26.1を使用します。ADX LEがUE5に対応した際は同じ実装法が使えると思われます。
基本的にブループリントのみでの実装を想定しています。
ADXはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/

なお、最近ADX2からADXへ名称が変更になりましたが、ツール構成は変更ありません(2がないから古いほう、というわけではありません)。

記事執筆時点のADX for UE4のSDKバージョンはv1_29です。

ADX2 for UE4の導入や基本的な使い方は以下の記事にあります。必要に応じて参照してください。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46

実装

エディタユーティリティ機能

エディタユーティリティは、ブループリントを使ってユーザーがエディタ挙動を設定できる機能です。
また、専用のUIを作ることもできます。こちらはエディタユーティリティウィジェット(以下EUW)と呼ばれます。
A_00B.png
(画像はUE5プロジェクトでの使用例です)
ボタンやテキストなどを自由に配置でき、挙動もプロジェクトに合わせてカスタム可能なため、一度作ってしまえば開発の大きな助けになるでしょう。

エディタユーティリティウィジェットを実装する

エディタユーティリティウィジェットを作成する

まずはEUWを新規に作成します。
コンテンツブラウザの空欄で右クリックし「Editor Utilities」→「Edit Utility Widget」を選択します。
A_01.png
適当に名前をつけます。
A_02.png

UEWから呼び出すアクターを新規に作成します。
コンテンツブラウザで右クリックし、「Blueprint Class」を選択します。
B_01.png
親クラスは「Actor」とします。
B_02.png
分かりやすい名前をつけます。
B_03.png
アクターをダブルクリックして開き、「+Add Component」から「Atom Component」を追加します。
B_04.png
Detailsパネルにて、再生するサウンドを指定します。テストの際に分かりやすくするため、ループする環境音などがいいでしょう。
B_05.png

「BP_CommonSound」を閉じます。
先ほど作成したEUWをダブルクリックして開くと、UMGと同じようなエディタ画面が起動しました。
A_03.png

UIを配置する

通常のUIと同じように、テキストやボタンを配置していきます。
左のPaletteパネルからドラッグアンドドロップすると各要素を配置することができます。
A_04.png
TextとButtonを組み合わせて簡単なものを作ってみました。
Buttonの中にTextをドラッグすると、Buttonの子にでき(中にテキストを配置でき)ます。

ボタンを選択し、Detailsパネルで分かりやすい名前をつけておきます。
また、名前の横の「Is Variable」にチェックがついていることを確認します。
ここにチェックがついていると変数として認識され、BPからアクセスすることが可能になります。
A_05.png
パネルを下にスクロールし、Eventsの「On Released」をクリックして、ボタンが押して離された際のイベントを追加します。
A_06.png
自動的にグラフへと遷移しました。
A_07.png
UIのデザインとBPグラフは右上のボタンで切り替えることができます。
A_08.png

EUWの処理を作成する

「ボタンを押すと指定した場所にサウンドが配置される」処理を作ります。
さて、エディタ上でユーザーが指定している場所を取得したいのですが……
Get Selected Actorsは現在レベル上で選択中のアクターを取得します。
この位置にサウンドを配置してみることとしましょう。
A_09.png
エディタ上では複数のアクターを選択できるため、値は配列として返されます。
0番目の(最初に選択した)アクターを選び、GetActorLocationで座標を取得します。
A_10.png
SpawnActor from Classノードで先ほど作成したアクター「BP_CommonAtom」を配置します。
A_11.png

EUWを使用してサウンドを配置する

作った実際にEUWを実際に使ってみましょう。
コンテンツブラウザ上でEUWを選択して、右クリックし「Run Editor Utility Widget」を選択します。
A_12.png
エディタ上にEUWで作成したUIが現れます。
A_13.png
適当なアクターを選択した状態で、「Atomサウンドを配置」ボタンを押します。
A_14.png
ボタンを離した瞬間に新しい「BP_CommonSound」が現れました!ワールドアウトライナからもアクターが確認・操作できます。
A_15.png
レベルを再生すると、その位置から環境音が聞こえるようになります。
A_16.png

処理結果をテキストで通知する

現状アクターが配置されたかどうかは実際にワールドアウトライナを見に行くしかないため、少し不便です。
連続してボタンを押すことで、意図せず同じ位置にたくさんのアクターが置かれてしまう恐れもあります。
そこで、簡単なメッセージをEUWに表示して処理がされたかどうかを判別できるようにしてみましょう。

ボタンの下にテキストを配置します。
A_17.png
名前を分かりやすくつけ、「Is Variable」にチェックを入れます。
テキストが長くなり、テキストブロックから見切れてしまう可能性があるため「Size To Content」にチェックを入れます。
A_18.png
グラフに移動します。配置処理後にSetTextでテキストの内容を変更します。
テキストはGet Display NameAppendを組み合わせ、「(アクター名)を配置」と出るようにします。
A_19.png
これで、配置されたアクター名が表示されるようになりました。処理が正常に行われたか一目で分かりますね。
A_20.png

ついでに処理が失敗した場合のメッセージも出してみましょう。
この処理はアクターが選択されていることが前提になるので、もし何のアクターも選択されていなかった場合は処理が失敗することになります。
選択されているアクターが有効かはIs Validノードで取得できます。
Branchの条件にして処理を分岐させます。
アクターが有効ならそのままサウンドを配置させます。
A_21.png
有効でない(アクターが選択されていない)場合、テキストにアクターが選択されていない旨を表示します。
A_22.png
アクターではないものを選択した状態では失敗したメッセージが表示されるようになりました。
A_23.png
今回の全体の処理はこんな感じです。
A_24.png

簡単にEUWを使用してサウンドを配置してみました。
この機能を使えば、UEになれていないデザイナーも必要な機能だけを触ることができるため、ミスの軽減や効率化に繋がります。
一人での開発を行っている場合でも、いちいち乱雑な作業を繰り返さなくていいため非常に便利になります。

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?