UEとADXLEでマスター音量を考慮した音量オプションの対応を考えてみた
1. 概要
ゲームにおいて、オプションのサウンド部分に「マスター音量」というものがあるかと思います。無いものもあります。
「マスター音量」「BGM」「SE」と音量調整ができるオプションを作る場合、どう対応すべきか考えてみました。
- マスター用のカテゴリを作った場合
- 内部的にマスター項目を用意した場合
の2パターンで考えてみました。
2. 環境
Unreal Engine 5.3.2
CRI ADXLE SDK 2.02.00
CRI ADXLE Tools 3.52.01
(PC変えて色々入れなおしたのでほぼ最新!)
3. マスター用のカテゴリを作った場合
①. カテゴリというもの
a. Atom Craft
Atom Craftを見ればわかりますが、「カテゴリ」というものが用意されてます。
こちらに「BGM」「SE」といったものを用意することができます。
キューに対してカテゴリの設定ができます。
やってみればわかりますが、一つのカテゴリーグループからは一つのカテゴリしか設定ができません。
先ほどのようなものだと、「BGM」と「SE」の両方を設定することはできません。
ですが、新しいカテゴリーグループを用意すれば二つ設定することができます。
今回、ひとまず「BGM」と「MASTER」、「SE」と「MASTER」という形でキューの設定をしてビルドをします。
次にUnreal Engineでそのカテゴリーを用いて音量の変更ができるようにします。
b. Unreal Engine
※わかりやすさ重視で、音量パラメータをレベルブループリントで管理・変更します
ADX V2からですが、エディター上でキューに設定しているカテゴリが見えるようになっています。
「Set Category Volume by Name」という関数ノードを用いて変更を行います。
雑多にこういう感じでやりましたが、ひとまずSEに設定したキューの音量が変化しているのが確認できました。
カテゴリのボリュームを変更した後に「停止」「再生」ということをしなくても反映されます。
ここで「MASTER」も変更できるようにします。
手元で試すか以下の動画を見て確認できますが、「MASTER」か「SE」のどちからを下げるだけで音量が下がります。
また、複数のカテゴリを設定した場合の音量はカテゴリの乗算となる仕組みのため、「MASTER」と「SE」をそれぞれ0.1にすれば「0.1 x 0.1 = 0.01」という音量結果になります。
②. こちらの場合の良い点・悪い点
a. 良い点
各々のカテゴリにパラメータを素直に渡すだけでいいので、小難しいことは不要になるかと思います。
b. 悪い点
懸念としては、全部のキューに「MASTER」を別途設定する必要があります。
ヒューマンエラーなどにより設定漏れが起きる場合を考慮して、Atom Craft ロボット(pythonスクリプト)を用意するのが最善かと思います。
4. 内部的にマスター項目を用意した場合
先ほどのものをそのまま利用します。
ただ、「MASTER」のカテゴリはないものと仮定します。
①. MASTER用の値を管理し、つどつど乗算
こういう感じの扱いになるのかなとは思います。
- SE音量を変えるたびにマスター音量との乗算結果で設定しなおす
- マスター音量を変えるたびに全部のカテゴリーを設定しなおす
②. こちらの場合の良い点・悪い点
a. 良い点
Atom Craftでカテゴリ設定する側としては、「SE」だけのカテゴリ設定で済むのでヒューマンエラーが少ないかと思います。
b. 悪い点
SEのカテゴリに渡している値としては、「SE x MASTER」の値となりますがユーザーに見せるオプションは「SE」の値となります。プログラマの人が設定ミスする気がします。
5. やってて気づいたこと
不具合により今だけなのか仕様なのかわかりませんが、ADXのカテゴリに音量を変更してからエディターのプレイを終えると、直前で変更された音量パラメータが保存されるようです。
例えば、デフォルトだと「SE」は1.0だと仮定します。
- エディタープレイ ⇒「SE」1.0
- プレイ中に数値変更 ⇒「SE」0.3
- エディター終了 ⇒「SE」0.3
- 再度エディタープレイ ⇒「SE」0.3
本場のゲームなら、起動時にユーザーが設定したオプションのコンフィグ設定を参照して、数値を入れなおしているかと思いますので問題ないですが、製作中も考慮しないとちょっとした報告が起きるかもしれないですね。
Discussion