見出し画像

第10回/サブシーケンスを使ってみる

こんにちは。
G2 Studios サウンドチームのサキサキです。
今回は「サブシーケンス」と呼ばれる音の再生シーケンスに関わる機能をご紹介いたします。
これまでに紹介した機能を交えての説明になりますので多少難しく感じるかもしれませんが、実用性の高い機能ですので丁寧に読み解いていきましょう!


■作業環境

本記事は以下の環境下での作業内容を記載いたします。
-----
<作業環境>
 Windows :Windows 10 Pro
 CRI SDK :criware_sdk_unity_v3_08_03_smartphone_ja
-----

■サブシーケンスとは

サブシーケンスはキューと同等の機能(※一部を除く)を持つオブジェクトです。
通常、キューの中に別のキューは作成できませんが、サブシーケンスを用いるとそれと同様のことができるようになります。

■サブシーケンスの配置

サブシーケンスはトラック直下に作成&配置するのが基本の形になります。

■サブシーケンスの用途

皆さんはCri Atom Craft で音声データを作成する際、次のようなことを考えたことはないでしょうか。
-----
・音の条件分岐(=スイッチキュー)の中にさらにランダム要素(=ランダムキュー)を入れたい
・音の条件分岐(=スイッチキュー)の中にさらに条件分岐(=スイッチキュー)を作りたい
-----
これを可能にするのがサブシーケンスです。

サブシーケンスは一度の再生リクエストに対し、複数のシーケンス(=シーケンスタイプ設定による音の再生方式)を同時に発動させたい場合に使用します。
通常、キューには何らかのシーケンスタイプを設定するようになっていますが、サブシーケンスにも同様にシーケンスタイプの設定項目があり、これを設定することでキューとサブシーケンスによる「シーケンスの入れ子構造」ができあがります。

<ワンポイント豆知識>
シーケンスタイプには「ポリフォニック」「シーケンシャル」「シャッフル」「ランダム」「ランダムノーリピート」「スイッチ」「コンボシーケンシャル」の全7種があります。
※「スイッチ」についての過去記事はこちら
※「ランダム」についての過去記事はこちら

■サブシーケンスの使用例

「スイッチ&ランダム」と「スイッチ&スイッチ」のシーケンスタイプの組み合わせについて、実用例を挙げて見てみましょう。
-----
<例①:スイッチ&ランダム>

ゲームジャンル:ペット育成ゲーム
音声発動の概要:
 犬とのふれあい(=ユーザーアクション)の際に、犬の鳴き声を発動する
 ふれあいの内容に応じて鳴き声が変化する
(※ここでは「なでる」と「ボールキャッチ」の2種)
 鳴き声は各ふれあいごとに2種の鳴き声から1種をランダムで選定して発動 する
必要な音声ファイル数:4

<例②:スイッチ&スイッチ>

ゲームジャンル:バトルRPGゲーム(※キャラクターデッキ編成あり)
音声発動の概要:
 バトル結果表示画面で、結果(=勝利 or 敗北)に応じてデ ッキリーダーのボイスを発動する
 勝利時に限り、デッキリーダーのレアリティ
(※ここでは「ノーマル」「レア」「超レア」の3種)
に応じた勝利ボイスを各1種を発動する
 敗北時には、デッキリーダーの敗北ボイス1種をレアリティに関係なく発動する
必要な音声ファイル数:4

-----
どうでしょうか。
図に表すことで、使い方のイメージが固まってきたのではないかと思います。

<ワンポイント豆知識>
サブシーケンスの入れ子構造は「キュー + サブシーケンス」といったシンプルな繋ぎ方に限らず、「キュー + サブシーケンス + サブシーケンス」といったように、サブシーケンスの配下にさらにサブシーケンスを配置するといった複雑な繋ぎ方もできます。

■CRI Atom Craftでサブシーケンスを使ってみる

それでは、CRI Atom Craftでサブシーケンスを使用した音声データを作成してみましょう。
ゴール条件は以下の通りとします。

-----
<ゴール条件> 
’■サブシーケンスの使用例’ で挙げた例①の音声データを作成する 

<例①:スイッチ&ランダム>
ゲームジャンル:ペット育成ゲーム
音声発動の概要:
 犬とのふれあい(=ユーザーアクション)の際に、犬の鳴き声を発動する
 ふれあいの内容に応じて鳴き声が変化する
(※ここでは「なでる」と「ボールキャッチ」の2種)
 鳴き声は各ふれあいごとに2種の鳴き声から1種をランダムで選定して発動する
必要な音声ファイル数:4

-----
AtomCraftを起動し、作業を始めるための準備を行います。
※キューシートやキューの作成など、基本的な音声データの作成方法についてはこちら

サンプル音源「Se_Dog_Pat_01.wav(※犬をなでた時の鳴き声1)」
「Se_Dog_Pat_02.wav(※犬をなでた時の鳴き声2)」「Se_Dog_BallCatch_01.wav(※犬とボールキャッチをする時の鳴き声1)」「Se_Dog_BallCatch_02.wav(※犬とボールキャッチをする時の鳴き声2)」をCRI Atom Craft内にインポート(=マテリアル登録)しておきます。
※こちらは私が作成したものなので、商用でも何でも自由にご利用いただいて大丈夫です。

<手順①>
先ずは、音声発動の概要(※最初の2項目)に習い、ワークユニットツリー上に新規のスイッチタイプキュー(=キューシート&キュー&トラック)を作成します。
また併せて、プロジェクトツリー上に音声切り替え用のセレクター(=セレクター&セレクターラベル)を作成し、キュー及びトラックにスイッチ変数の割り当てを行います。
※「スイッチタイプキュー」についての過去記事はこちら

犬とのふれあい(=ユーザーアクション)の際に、犬の鳴き声を発動する
ふれあいの内容に応じて鳴き声が変化する
(※ここでは「なでる」と「ボールキャッチ」の2種)

またこの時、スイッチタイプキューとセレクターの名称は下記のように変更しておきます。

-----
<オブジェクト名称>
 キューシート名:Se_Dog_Interaction
 キュー名:Se_Dog_Interaction
 トラック名:Pat
       BallCatch

<セレクター名称>
 セレクター名:interaction
 セレクターラベル名:pat
           ballCatch

-----
<手順②>
次に、音声発動の概要(※最後の項目)にならい、「Pat」「BallCatch」のトラック直下にサブシーケンスを作成します。

鳴き声は各ふれあいごとに2種の鳴き声から1種をランダムで選定して発動する

該当トラックをそれぞれ選択し、ワークユニットツリー上部に表示されたいくつかのアイコンから「サブシーケンスの作成」アイコンを選択します。
トラック直下にサブシーケンスが作成されますので、名称を分かりやすく「Random」と変更しておきます。

<手順③>
作成されたサブシーケンスを選択後、インスペクターにある「シーケンスタイプ」の値(※デフォルト値は「ポリフォニック」)を押下し、表示されたプルダウンから「ランダム」を選択して設定します。

<手順④>
マテリアルツリーから予め用意しておいた4つの音声ファイルをDrag&Dropし、キューの中に配置します。
トラック「Pat」直下のサブシーケンスには「Se_Dog_Pat_01.wav」「Se_Dog_Pat_02.wav」、トラック「BallCatch」直下のサブシーケンスには「Se_Dog_BallCatch_01.wav」「Se_Dog_BallCatch_02.wav」といった要領です。

これで作業は完了です。
キューを再生させると、意図した形で音が鳴っているのを確認できます。

■実装における注意点

サブシーケンスの使用における注意点をいくつか挙げておきたいと思います。
-----
・サブシーケンスの表示アイコン
CRI Atom Craftではキューのアイコンがオレンジ色で表示されているのに対し、サブシーケンスのアイコンは青色で表示されています。
そして注意すべきは、キューのアイコンはシーケンスタイプの設定ごとに絵柄が変化しますが、サブシーケンスのアイコンはシーケンスタイプの設定に関係なく1種類のみの表示であるということです。

 一見しただけではそれらに何の設定がされているのかわからないため、特にCRI Atom Craftに慣れていない人にとっては読解が難しいものになります。
 使用の際には設計資料に記載して関係者に共有を行うなど、いざという時のためのリスクヘッジを行っておきましょう。

・シーケンスタイプの複数接続時におけるデータサイズ
サブシーケンスを使用したシーケンスタイプの組み合わせ例をいくつか挙げましたが、音声データの作成の際には1キューシート内に格納されるリージョンの合計サイズに注意しましょう。
各シーケンスタイプはそれ単体において複数のリージョンの格納が前提とされてますので、それらが組み合わさり入れ子構造になる場合、当然それに合わせてリージョンの合計サイズも増加する傾向にあります。
サウンド再生時にはキューシート内に含まれる音声データは一度全てワークメモリ上に展開される形になりますので、大きなデータサイズになると想定される場合には、その負荷についての考察や事前検証が重要になってきます。

-----

■まとめ

「サブシーケンス」は公式のマニュアルにはさほど細かい説明はされてませんが、通常であればソースコードを書いて組み上げるような分岐構造をリソース作成の一環として作成できる、非常に実用性の高い機能です。
もちろん、使用に当たってはサウンドの知識のみならずクライアント開発についての知識も少なからず必要となってくるため、実装のハードルが少しだけ上がってしまうのが難点となりますが、関係者間ですり合わせを行うことで十分に解決できる内容だと考えます。
また、サブシーケンスを使用した実装方法について、サウンドデザイナー側からクライアント開発側に提案を行いそれらを自在に組み上げられるようになれば、これまで以上にゲーム開発を楽しめるようになってくるのではないかと思います。
これはもう、マスターするしかありませんね!

今回のnoteは以上となります。

▼サウンド関連のnoteをまとめたマガジンがあります!

▼G2 Studiosについてはこちら

▼最新情報はX(Twitter)でご確認ください!



X(Twitter)にて最新のお知らせを配信しております。ぜひフォローしてください!