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?

ADX + UE5で音量コンフィグを実装

Last updated at Posted at 2019-12-19

はじめに

ADXアンバサダーとして記事を書いておりますSigと申します。
この記事ではアンリアルエンジン5とサウンドミドルウェア「ADX for UE」を連携させ、
BGMや効果音、ボイスなどを個別に音量調節できる機能を作成します。
ゲームなどにおける、いわゆる「音量コンフィグ」ってやつです。

完成図はこんな感じです。
D11.png
UIのスライダーを操作すると、対応したサウンドの音量が増減します。

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

前提

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

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

やること

  • AtomCraftでサウンドをカテゴリ分け
  • UE5にインポート
  • UMGでUI作成
  • ブループリントで音量コンフィグを実装
  • テストプレイ

実装

AtomCraftを使い、サウンドをカテゴリごとに分ける

プロジェクトの作成

AtomCraftを起動し、今回のためのプロジェクトを作成します。
E01.png

サウンドのインポート

サウンド素材をインポートします。
今回は「BGM」「SE」「UI」といった3つのカテゴリを想定し、それぞれ名前をつけた素材を用意しました。
素材をインポートします。
E02.png

キューシートにインポートした素材をドラッグ&ドロップし、独立したキューを作成します。
E03.png
E04.png

カテゴリを作成する

サウンドをカテゴリ分けするには、まずカテゴリそのものを作る必要があります。
AtomCraft上部の「プロジェクトツリー」から、「カテゴリ」を見てみましょう。
E05.png

ダブルクリックして展開していくと、カテゴリグループとカテゴリ名が現れます。
E06.png

「カテゴリ」が、さらに「カテゴリグループ」に分けられる理由は後ほど解説します。

今回は「CategoryGroup_0」内に3つのカテゴリを作っていきます。
CategoryGroup_0」を右クリックし、メニューより「新規オブジェクト」→「カテゴリの作成」を選択。
E07.png

新しいカテゴリが作られるのでリネームします。右クリックのメニューから名前を変更してもいいですし、該当のカテゴリを選択してF2キーでもリネーム可能です。
E08.png

同じように「SE」「UI」も作成。
E09.png

キューをカテゴリ分けする

任意のキューを選択し、AtomCraft右側のインスペクター内、「カテゴリ」をクリックします。
F01.png

カテゴリを編集するウィンドウが現れるので、適切なカテゴリにチェックをつけます。
F02.png

カテゴリに「BGM」が設定されました。
F03.png

同じように、他のキューに対してもカテゴリを設定します。

カテゴリグループの用途

キューに付加できるカテゴリはひとつに限らず、カテゴリグループを分けることで、キュー自体が複数のカテゴリを持つことができます。
カテゴリグループはプロジェクトツリーから新規追加できます。
F04.png

キャラクターボイスというカテゴリと、キャラクターの種類ごとに音量調節する想定でカテゴリを作ってみました。
F05.png

カテゴリ編集ウィンドウで設定すると、キューが「Voice」カテゴリと「Char_Monster」カテゴリを同時に持つことができます。
F06.png

これでゲーム中に「モンスターの鳴き声だけを有効にしたい」と思ったら、**「現在のボイス音量設定を反映しつつ、モンスター以外のキャラクターボイス音量を小さくする」**という処理が実現できるわけです。

キューシートのエクスポート

プロジェクト内でキューシート名が被る可能性がある場合、キューシートをリネームしておきましょう。
F07.png

キューをカテゴリ分けできたら、キューシートをビルドします。
F08.png

これでAtomCraft側の作業は完了です。

UE5へのインポート

UE5を起動し、任意のフォルダにAtomConfigとキューシート(acb, acfファイル)をインポートします。
A01.png

キューシートアセットを開き、音声が再生できることを確認します。
A02.png

###サウンドのテスト再生
レベルを新規作成し、適当にサウンドを配置します。
A03.png

サウンドがプレイ開始時に自動再生されないよう、Detailsパネルから「Auto Activate」のチェックを外しておきます。
A04.png

これらのサウンドを再生するための簡単なテスト処理を作ります。
まずは配置した3つのキューを選択しておきます。

A05.png

選択した状態でレベルブループリントを開きます。
A06.png

イベントグラフ上の空欄で右クリックし、「Create References to 3 Selected Actors」(選択した3つのアクターに対してのリファレンスを作成)を選択します。
A07.png

リファレンスノードから線を引き出し、「Play(AtomComponent)」を選択します。
A08.png
これでサウンドを再生するためのノードができました。
A09.png
他ふたつのリファレンスノードに対しても同じようにノードを作成します。
A10.png
Input Key 1ノードを配置し、「1」キーを押したらサウンドが再生されるようにします。
他のノードに対しても、「2」キー、「3」キーで再生されるよう組みます。
A11.png

一度テストしてみましょう。
各キーを押して、サウンドが再生されるか確認します。

サウンドが再生されているか確実に確認するためには、コンソールコマンド「atom.3dVisualize.Enabled 1」を使用すると便利です。
A13.png
A12.png

UMGでUIを作成

今回はUE5標準のUMGを使用し、音量調節用のUIを実装します。

ウィジェットを作成

適当なフォルダを作り、コンテンツブラウザで右クリックして「User Interface」→「Widget Blueprint」で新しくUIを作ります。
B01.png
B02.png

ダブルクリックすると、UMGのエディタが開きます。
B08.png

UIをデザイン

まずは他のUIパーツを置くための「下地」を作ります。
エディタ左上の「Palette」パネルから「Canvas」をドラッグ&ドロップします。
B04.png
枠が現れ、この上に様々なパーツを配置できるようになりました。
B05.png

今度は「Palette」パネルから「Slider」をドラッグアンドドロップすると、今回音量変更に使うスライダーが現れます。
B06.png

同じように「Text」をドラッグアンドドロップし、テキストも呼び出します。
B07.png

エディタ左側のDetailsパネルで文字列やスライダーの大きさなどが操作できます。
B08.png

ここで各パーツの名前なども設定しておくと、後で分かりやすいです。
B09.png

これを3つぶん作ります。UIのパーツに対して、コピペなども使うことができます。
B10.png

デザインというにはおこがましいですが、簡易的なコンフィグができました。
Detailsパネルでフォントを多少大きくしています。

アンカーを設定し、表示崩れを防ぐ

UMGを既に使われている方ならご存知かもしれませんが、ゲーム中はウィンドウサイズなどに合わせてUIの表示が崩れることがあります。
これを防ぐのが「アンカー」です。
UIのパーツを選択し、Detailsパネルの「Anchors」をクリックします。
B11.png

今回はこのUIを画面の真ん中に表示するので、真ん中に四角があるボタンをクリックします。
B12.png

これでこのパーツの基準点が真ん中になり、ウィンドウがサイズが変わった場合でも、ウィンドウの中心を基準として座標が設定されます。
B13.png

すべてのパーツのアンカーを同じように中心に設定しておいてください。
アンカーを統一することにより、数値での座標指定が揃えやすくなります。
B14.png

ウィンドウの枠となるよう、「BackGround Blur」を配置します(必須ではありません)。
B15.png
こちらはスライダーやテキストよりも背面に来てほしいので、Detailsパネルにて「ZOrder」を「-1」にします。
B16.png
「Blur Strength」でブラーの量が指定できます。
B16b.png

簡易なコンフィグウィンドウができました。
B17.png

ブループリントで音量コンフィグを実装

ブループリントエディタを開く

今回は、UI自体が音量コンフィグの処理を持つものとします。
画面左上の「Graph」ボタンをクリックすると、ウィジェットのブループリント編集へと移ることができます。
C01.png
C02.png

ノード配置

「My Blueprint」パネルの「Variables」内に先ほど作成したスライダーがあります。
C03.png

「Slider_BGM」を選択し、下部のDetailsパネルの「Events」にある「On Value Changed」の右の「+」ボタンを押します。
これでこのスライダーの値が変更された際に発火されるイベントが作られます。
C04.png
On Value Changed(Slider_BGM) が配置されました。
C05.png
ここから今回の主目的である、カテゴリ内の音量を一括して変更するにはSet Category Volume by Nameノードを使用します。
C06.png
「Category Name」を「BGM」とし、On Value Changedノードの「Value」ピンから「Volume MultiPlier」に線をつなげばOKです。
C07.png
他のスライダー、カテゴリについても同じようにノードを配置します。
C08.png

これで音量調節ができるようになりました!さっそくテストしてみましょう。

テストプレイ

レベルブループリントからUIを呼び出す

実装はできましたが、UIをゲーム中に表示する処理はつくられていません。
レベルブループリントからUIを呼び出してみましょう。

D01.png

Event Begin PlayノードからCreate Widgeノードを配置します。
D02.png

(ノードを配置するとConStruct NONEという名前に変わりますが問題ありません)
「Class」に先ほどのUIを設定します。
D03.png

さらにCreate Widgetノードの「Return Value」から線を引き出し、Add to Viewportを配置します。

D04.png
D05.png

UIをマウスで操作するには、ゲーム中にマウスカーソルを呼び出す必要があります。
Get Player Controllerノードを配置します。
D06.png

Return Valueから線を引き出し、Set Show Mouse Cursorノードを配置します。
D07.png
Set Show Mouse Cursorノードのチェックボックスにチェックを入れます。
D08.png

最終的なノード全体図は以下のようになります。
D09.png

ビューポートの「Play」ボタンを押すとゲームが開始され、音量コンフィグウィンドウも呼び出されるはずです。
D11.png

各スライダーをマウスで動かし、1,2,3キーでのテスト再生をして音量が変わっているかを確認してみましょう。
(画像では視認性向上のため、「BackGround Blur」と同じ座標に「Image」で黒い長方形を表示しています)

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?