第11回/カテゴリを設定してみる
こんにちは。
G2 Studios サウンドチームのサキサキです。
今回は「カテゴリの設定」についてご紹介いたします。
CRI Atom Craftにはカテゴリの設定を前提とした数多くの機能が存在します。
本記事では、その入口とも言うべき「カテゴリを設定してボリュームの調整を行う」ところに焦点を当てたいと思います。それでは進めていきましょう。
■作業環境
本記事は以下の環境下での作業内容を記載いたします。
-----
<作業環境>
Windows :Windows 10 Pro
CRI SDK :criware_sdk_unity_v3_09_01_smartphone_ja
Unity:2022.3.1f1
-----
■カテゴリとは
「カテゴリ」はCRI Atom Craft における全体設定項目の1つです(※公式では「オブジェクト」として定義されています)。
カテゴリを用いることでプロジェクト内に作成されたキューを任意のグループに分類することができます。
■カテゴリグループ
カテゴリをさらにグループ化させたものを「カテゴリグループ」と言います。
オブジェクトの作成順位は「カテゴリグループ >カテゴリ」となるため、カテゴリは必ず何かしらのカテゴリグループに属する形になります。
■カテゴリの重複設定
1つのキューに対して設定できるカテゴリの数は同一カテゴリグループ内では1つだけに限定されますが、カテゴリグループを複数作成すれば、各カテゴリグループから1つずつ最大で16個まで設定ができます。
そしてこの場合、キュー再生時の音量には設定している全てのカテゴリのボリューム値が反映される形になります。
■CRI Atom Craftでカテゴリを設定してみる
それでは、CRI Atom Craftでカテゴリを設定してみましょう。
作業用に2つのサンプル音源「Se_Battle_Gunshot.wav(バトル /銃声)」「Se_System_Decision.wav(システム /決定)」を用意しました。
※こちらは私が作成したものなので、商用でも何でも自由にご利用いただいて大丈夫です。
ゴール条件は以下の通りとします。
-----
<ゴール条件>
-----
<ゴール条件>
カテゴリグループ「Main(メイン)」を作成し、その中にカテゴリ「Se(効果音)」を作成する
カテゴリグループ「Sub(サブ)」を作成し、その中に2つのカテゴリ「Battle(バトル)」「System(システム)」を作成する
サンプル音源「Se_Battle_Gunshot.wav」から音声データ「Se_Battle_Gunshot(※キューシート、キューは同名)」を作成し、2つのカテゴリ「Se」「Battle」を設定する
サンプル音源「Se_System_Decision.wav」から音声データ「Se_System_Decision(※キューシート、キューは同名)」を作成し、2つのカテゴリ「Se」「System」を設定する
全3つのカテゴリについて各ボリューム値を変化させ、意図通りの音量で音声データが再生されるかを確認する(※詳細は下記)
-----
CRI Atom Craftを起動し、作業を始めるための準備を行います。
※キューシートやキューの作成など、基本的なサウンドデータの作成方法についてはこちら
<手順①>
・カテゴリグループ「Main(メイン)」を作成し、その中にカテゴリ「Se(効果音)」を作成する
全体設定にカテゴリグループとカテゴリを作成していきます。
プロジェクトツリー上の「全体設定/カテゴリ」の中を見ると、最初からカテゴリグループとカテゴリが各1つずつ用意され、それぞれに「CategoryGroup_0」「Category_0」と名称が付けられているのがわかります。
「CategoryGroup_0」を「Main」に名称変更、さらに「Category_0」を「Se」に名称変更します。
これで、1つ目のカテゴリグループとカテゴリの登録は完了です。
<手順②>
・カテゴリグループ「Sub(サブ)」を作成し、その中に2つのカテゴリ「Battle(バトル)」「System(システム)」を作成する
「全体設定/カテゴリ」を選択し、プロジェクトツリー上の左上に表示されたアイコン「カテゴリグループの作成」を押下します。
新たにカテゴリグループが作成されますので、名称を「Sub」とします。
<手順③>
カテゴリグループ「Sub」を選択し、プロジェクトツリー上の左上に表示されたアイコン「カテゴリの作成」を押下します。
新たにカテゴリが作成されますので、名称を「Battle」とします。
同様にしてカテゴリをもう一つ作成し、名称を「System」とします。これで、2つ目のカテゴリグループとカテゴリの登録は完了です。
<手順④>
・サンプル音源「Se_Battle_Gunshot.wav」から音声データ「Se_Battle_Gunshot(※キューシート、キューは同名)」を作成し、2つのカテゴリ「Se」「Battle」を設定する
・サンプル音源「Se_System_Decision.wav」から音声データ「Se_System_Decision(※キューシート、キューは同名)」を作成し、2つのカテゴリ「Se」「System」を設定する
マテリアルツリーにある該当マテリアル x2 をワークユニットツリーにドラッグ&ドロップし、キューシートとキューを作成します。
<手順⑤>
作成されたキューにカテゴリを設定していきます。
該当キューを選択してインスペクター上の「カテゴリ」項目を見ると、このタイミングでは値が空欄になっているのがわかります。
空欄箇所を押下すると「カテゴリの編集」ダイアログが開きますので、要件を満たす値にチェックを入れて「OK」ボタンを押下します。
これにより、各キューのインスペクター上の該当項目に、先ほどの値が反映されているのを確認できるかと思います。
<手順⑥>
・全3つのカテゴリについて、各ボリューム値を変化させて意図通りの音量で音声データが再生されるかを確認する(※詳細は下記)
⇒カテゴリ「Se」のボリューム値の変化に合わせて
「Se_Battle_Gunshot」「Se_System_Decision」の音量が変化する
各カテゴリのボリューム値を変更して、再生音量の確認を行います。
プロジェクトツリー上の「全体設定/カテゴリ/Main/SE」を選択し、「ボリューム」項目の値を変更(※ここでは「0.50000」)します。
カテゴリのボリューム値は「0.00000 ~ 5.00000(※初期値&基準値は「1.00000」)」の浮動小数点型の数値で設定できます。
設定後、要件通りに音量が変化していれば、正しく設定されています。
<手順⑦>
⇒カテゴリ「Battle」のボリューム値の変化に合わせて「Se_Battle_Gunshot」の音量は変化するが、「Se_System_Decision」は変化しない
プロジェクトツリー上の「全体設定/カテゴリ/Sub/Battle」を選択し、「ボリューム」項目の値を変更(※ここでは「0.50000」)します。
設定後、要件通りに音量が変化していれば、正しく設定されています。
この時、音声データ「Se_Battle_Gunshot」については、手順⑥と⑦によるW効果、つまりボリューム値の変更が2重に掛かっています(※ボリューム値算出:0.50000 x 0.50000 = 0.25000)ので、注意しましょう。
<手順⑧>
⇒カテゴリ「System」のボリューム値の変化に合わせて「Se_System_Decision」の音量は変化するが、「Se_Battle_Gunshot」は変化しない
プロジェクトツリー上の「全体設定/カテゴリ/Sub/SE」を選択し、「ボリューム」項目の値を変更(※ここでは「0.50000」)します。
設定後、上記の要件通りに音量が変化していれば、正しく設定されています。
この時、対象の音声データ「Se_System_Decision」については、手順⑥と⑧によるW効果(※ボリューム値算出:0.50000 x 0.50000 = 0.25000)が掛かっていますので、注意しましょう。
ここまでで問題がなければ、CRI Atom Craftにおける作業は完了となります。
■実装における注意点
カテゴリ設定における注意点をいくつか挙げておきたいと思います。
-----
ACBファイルとACFファイルの関係性
カテゴリを設定をすると、ビルド後に書き出されるACBファイルは、同ACFファイルに依存する関係性になります。
ACBファイル内にあるカテゴリ(キューに設定されたカテゴリ)がACFファイル内(「全体設定/カテゴリ」)に存在しない場合、不整合となり正しく音が再生されないことがあります。
登録するカテゴリに変更が入った際には再ビルドを行い、ACBとACFの両ファイルを更新するようにしましょう。
必要最小限のカテゴリ設定
リリース後の運用を必要とするゲームの場合、行き過ぎたカテゴリの重複設定はその複雑さから運用コストを引き上げる要因となりかねません。
用意するカテゴリはゲーム要件を満たす最小限のものに留めるようにしましょう。
-----
■プログラム(Unity /C#)によるボリューム調整
ゲームアプリ内にあるオプション設定において、音量の調整機能が実装されているのをよく見かけます。
同様のものを実装する場合、CRI Atom Craftで登録したカテゴリのボリューム値をプログラム側で取得し、それらをオプション設定側の任意のプロパティに紐づけるのが最適です。
以下に簡単なサンプルコードを貼っておきます。
ここで大事なのは、静的なメンバ関数である「static float GetCategoryVolume (string name)」と「static void SetCategoryVolume ( string name ,float volume )」です。
これらをUIのスライダー機能に紐づけて、スライダーの位置変更時にプログラムでメソッドを呼び出すといった要領になります。
■まとめ
「カテゴリの設定」は使用頻度が非常に高く、CRI Atom Craftにおける主力機能の1つと言えます。
あるとないとでは受ける恩恵に大きく差が出てきますので、確実に押さえるようにしましょう。
次回以降、冒頭にて触れた「カテゴリの設定を前提とした数多くの機能」について、数回の記事に分けて紹介をしていく予定です。
皆さんが知っている、サウンド実装に欠かせない「あの技法」に繋がる内容になりますので、ご期待ください(笑)
今回のnoteは以上となります。
▼サウンド関連のnoteをまとめたマガジンがあります!
▼G2 Studiosについてはこちら
▼最新情報はX(Twitter)でご確認ください!