はじめに
ADXアンバサダーのこはとです!
CRIADXには、Asset Support Addonというプラグインが提供されています。
Asset Support Addonは、UnityのADXの機能を更に使いやすくするUnity専用の拡張機能となります。本記事では、Asset Support Addonを導入することによるメリットと、実際の導入方法、使い方を紹介します。
この記事は、CRIWAREが提供するサウンドミドルウェア「CRI ADX」の機能についての紹介をします。
本記事では、CRI ADX初心者の方でも触れやすいよう、簡単な内容で解説していきます。
CRI ADXについてはこちら
Asset Support Addonとは?
Asset Support Addonは、CRI社が提供する、ADX for Unity向けのプラグインです。
2022年のADXのアップデートで新しく追加されたパッケージであり、従来のUnity環境におけるADXのインターフェイスを拡張し、より使いやすく、幅広いケースに対応することが目的の拡張機能です。
導入するとことで、大きく以下の3点のメリットがあります。
メリットその1:CRIAssets形式の追加により、ACBやACFファイルの認識が変わり、扱いやすくなる
Asset Support Addonを導入すると.acbや.acfなどのADX用ファイルが、実体はそのままに、Unity側で新しく「CRIAssets」という形式で認識されるようになります。
導入すると、ACBやACFなどのファイルにアイコンが付くようになります。
CRIAssetsでは、ファイルにアイコンをつけるだけではなく、例えば
- ACBやACFのファイル内容のプレビューをUnity上で確認することができる
- ファイルパスの制限が無くなる(StreamingAssetsフォルダじゃなくても扱えるようになる)
- Prefabのように、ACBやACFをドラッグアンドドロップで参照することができる
など、より直感的なファイル管理を行える機能が追加されます。
メリットその2:CriAtomCueReferenceで、より直感的かつ安全に音声管理ができる
従来のADXで音楽を再生する際は、CueSheetとCueNameの両方を文字列(String)で入力する必要がありました。
これは、動的な参照がしやすい代わりに
「CueSheetに無いCueNameを指定してエラーが発生する」
「タイピングミスでエラーが発生する」
など、人為的なミスでエラーが発生するリスクもありました。
一方、Asset Support Addonを導入すると、新しくCriAtomCueReferenceという構造体が追加されます。
これは「CueSheetに紐づいたCueNameだけを選択できる」構造体となっており、これを用いることで、従来のADXで発生していたような「CueNameの指定ミス」を減らすことができます。
また、ACBファイルのドラッグアンドドロップ+CueNameのドロップダウンで、直感的に再生したい音声を指定することができます。
メリットその3:ACBなどのファイルの組み込み形式が拡張され、WebGL向けビルドにも対応できる
Asset Support Addonでは、CriAssetsの恩恵により、ACBなどのファイルの読み込み形式が増え、従来とは異なる方法でデータの読み込みができるようになりました。
これまではACBなどのファイルをStreamingAssetsフォルダに入れることでロードを行っていましたが、StreamingAssetsからのロードは、WebGLなどの一部のプラットフォームでは対応しておらず、代わりにAddressablesを用いて、外部サーバーなどからデータをロードする必要がありました。
このため、ADXを用いたプロジェクトは、特にUnityRoomなどのWebプラットフォーム向けビルドの敷居が高いという問題がありました。
Asset Support Addon導入後は、CRIAssetsの項目に新しく「DeployType」という項目が追加され、この内容によって、各ファイルが「どのような読み込まれ方をするか」を選択することができるようになりました。
各DeployType毎の簡単な違いを以下に記載します。
OnMemory
これを設定したファイルは、ゲームAssetそのものにデータとして含まれ、ビルドデータでは他のゲームのAsset(例えば画像など)と同様に読み込まれます。
→小規模なゲーム向け。WebGL向けのビルドはこれで解決します。Asset Support Addonを導入後はこの設定を推奨します
Addressable
これを設定したファイルは、Addressableのビルドにこのファイルが含まれるようになり、ビルドデータではAssetBundleからデータを読み込むようになります。
→サーバー経由で楽曲データなどを更新する必要がある、大規模なゲームでオススメの設定
以上がAsset Support Addonの主な機能です。
まとめると
- 「CRIAssets」形式で、ACBやACF、AWBファイルが見やすくなる
- 「CriAtomCueReference」構造体で、Unityでより直感的、かつ安全に扱いやすくなる
- 「DeployType」設定で、Addressableを使わずとも、WebGLのビルドに対応できる
などのメリットがあります。
次の項目で、実際に導入して使い方を見てみましょう。
Asset Support Addonを導入してみる
Asset Support Addonの実体は、Unity向けADXプラグインのフォルダに含まれてるUnityPackageで、導入自体はこのUnityPackageをプロジェクトにImportするだけでOKです。
ただし、Asset Support AddonはUnity向けADXプラグイン(本体プラグイン)の機能に上乗せして使用するプラグインとなっています。そのため、導入の前には必ずUnity向けADXプラグインが導入されていることを確認しましょう。
本体プラグインの導入方法はこちらをご参照ください。
Asset Support Addonのインポート
本体プラグインの導入が確認できたら、まずImportPackage>Custom Packageを選択。
Unity向けADXプラグインのフォルダのAddonへ移動し、UnityPackageをインポート。
インポートが正常に完了すると、StreamingAssets以外のフォルダへ配置したADX用ファイルにアイコンがつくようになります。
※なお、StreamingAssets以下のフォルダに配置すると、従来通りのファイルの扱いが可能です。
Asset Support Addonを使ってみる
それでは、実際にAsset Support Addonを使った機能を実装してみましょう!
今回はAsset Support Addonを用いることで、既存のUnityAudioに近い操作感で、ゲーム実行ボタンを押すと音声が再生される、という機能を実装してみようと思います。
1:UnityProject、Acb、Acfファイルを準備する
Unityのプロジェクトを新しく作成し、オーサリングソフト「AtomCraft」で音声の設定、ACB、ACFのデータを作成します。
もし既存のプロジェクトやデータがある場合は、そちらを使用してもOKです。
本記事ではこのプロセスの解説は割愛するため、詳しい操作方法などはこちらの記事の「作成したデータの出力」までをご参照ください。
今回は音声の設定されたCueが一つでも存在しているCueSheetがあれば大丈夫です。
作成できたら、Unityプロジェクトに作成したACB、ACFを書き出しておきましょう。
2:ADX用コンポーネントを作成する
CRIADXを使用するうえで必要なコンポーネント群をScneneに作成します。
まず、新しく空のGameObjectを作成し、名前を「CRIWARE」とします。(名前は任意でOK)
このGameObjectに、AddComponetから新しく<CriAtomAssets>を選択しましょう。
CriAtomAssets?
CriAtomAssetsは、ACBやACFといった、ADXで使用するためのファイルをゲーム内で読み込み・初期化するために使用するコンポーネントです。
ゲーム内で使用するACBやACFなどのファイルは、音声の再生前に何らかの方法で初期化する必要があります。
CriAtomAssetsを設定することで、ゲーム実行時にこれらを一括で初期化させることができますが、後述のCriAtomSourceForAssetを使用しても同様の初期化が可能です。
機能紹介も兼ねて、今回はCriAtomAssetsとCriAtomSourceForAssetの両方を使用します。
作成したら、CriAtomAssetsコンポーネントにAcbなど必要なデータを参照させます。
Projectタブで作成したACBデータの場所を開き、AcfAssetの箇所にACFファイルを、AcbAssetsの項目を追加して、ACBファイルを追加しましょう。
「CriAtomAssets」の設定が終わったら、更に右クリックメニューのCreateから、CriWareErrorHandlerとCriWareLibraryInitializerを作成し、GameObject「CRIWARE」の子要素にしましょう。
3:スクリプトを作成する
任意の場所に新しくスクリプトを作成しましょう。
今回は名前を「TestSound」としています。
以下がスクリプトの内容です。
using UnityEngine;
//※↓忘れずに入れる!
using CriWare.Assets;
public class TestSound : MonoBehaviour
{
//Soundの内容。Editorで設定する
public CriAtomCueReference soundCue;
//Soundを再生するSource。Editorで設定する
//※セットするコンポーネントは<CriAtomSource>ではなく<CriAtomSourceForAsset>なので注意!
public CriAtomSourceForAsset soundSource;
//ゲーム実行ボタンを押した際に一度だけ実行
private void Start()
{
//音声をSourceにセット
soundSource.Cue = soundCue;
//Sourceを再生
soundSource.Play();
}
}
重要なポイントについて、以下で解説します。
using CriWare.Assets;
上述の機能に限らず、スクリプト内でAsset Support Addonの機能を使う際は必ずこのNameSpaceの読み込みが必要です。忘れずに記述しましょう。
ちなみに、Asset Support Addon以外の従来のCRIADXの機能を使う場合は、これとは別に「using CriWare」の記述も必要です。音声関係を取り扱うスクリプトでは、ひとまずその2つをスクリプトの冒頭に記述しておくと良いでしょう。
using UnityEngine;
using CriWare;
using CriWare.Assets;
CriAtomCueReference
前章でも解説した、CueSheetに紐づいたCueNameだけを選択できる構造体です。
この構造体一つで、CueSheetとCue情報をまとめて管理することができ、これを使用することで、より直感的かつ安全に音声を参照することができます。
//↓従来のやり方。基本的に両者はセットで使用。
//cueSheetに無いcueNameを指定するとエラーになるほか、タイプミスをしてもエラーになる。
public string cueSheet;
public string cueName;
//↓Asset Support Addonで追加されたやり方。
//直接Acbファイルをドラッグアンドドロップし、その上でAcbに紐づいたCueを選択するだけ。
//最終的なSourceへの入力は変わらないため、もちろん従来通りのやり方も可能。
public CriAtomCueReference cueReference;
今回はPublic変数にしたため、Editor上で音声をドラッグアンドドロップでセットすることができ、操作は既存のUnityAudioとかなり近い操作感にすることができます。
余談ではありますが、CriAtomCueReferenceは一つの構造体からCue、CueSheetの情報を両方取得することが可能です。
ただし、CriAtomCueReferenceからはCueの情報はCueIDのみが直接取得可能です。
そのため、CueNameを取得したい場合は、ACBに登録されているCueInfoの中から、CueIDのものを取得してCueNameを読み取る形で取得してください。
string GetCueName(CriAtomCueReference soundCue)
{
string cue_Name = "";
//・誤
//cue_Name = soundCue.cueName;//←CriAtomCueReferenceに.cueNameは存在しない
//・正(例)
//CueIDを参照し、一回Infoに落とし込む
CriAtom.GetCueSheet(soundCue.AcbAsset.name).acb.GetCueInfoByIndex(soundCue.CueId, out CriAtomEx.CueInfo info);
//InfoからCueNameを取得する
cue_Name = info.name;
return cue_Name;
}
CriAtomSourceForAsset
Cueを再生するためのコンポーネントの一つです。
機能としてはUnityのAudioSourceと同じような扱いも可能ですが、単一音声の重複再生や、Editorでの直接プレビュー、フェードイン、フェードアウトをスクリプト上から設定できるなど、UnityのAudioSourceより詳細に音声を操作できる機能が実装されています。
<CriAtomSource>が従来のADXでの機能に対し、<CriAtomSourceForAsset>は、これをCRIAssets向けにマイナーチェンジしたコンポーネントとなります。
今回はCriAtomCueReferenceをセットし、Play()で再生する機能を実装しています。
実装ができたら、スクリプトをGameObjectに設定していきましょう!
4:作成したスクリプトを設定する
新しく空のGameObjectを作成し、名前を任意のものにしましょう。
今回は「SoundPlayer」としました。
作成した「SoundPlayer」に、AddComponetから<TestSound>と<CriAtomSourceForAsset>コンポーネントを追加しましょう。
追加できたら、音声を設定していきます。
SoundCueにAcbファイルを、SoundSourceに先ほどアタッチしたCriAtomSourceForAssetを設定しましょう。
もし複数のCueをCueSheetに登録した場合は、SoundCueの横のドロップダウンで再生したいCueを選択することができます。
5:セット完了!音声を再生してみよう
以上でセットアップは完了です。
ゲームを実行し、音声を再生してみましょう。
登録した音声が正常に再生されればOKです!
まとめ
お疲れ様でした!
Asset Support Addonを用いることで、
- 「CRIAssets」形式による、UIのUnity向け最適化
- 「CriAtomCueReference」構造体の、より直感的な参照、より安全な運用
といった部分が体験できていたら幸いです。
特に今回のAsset Support Addonで追加されるCriAtomCueReferenceは、エディタ上でも視認性が良くなるほか、不具合の発生も防ぎつつ、スクリプト上でも一つでCueIDとCueSheetの情報を両方渡すこともできるので、非常に便利な機能となっています。
Listにして複数取得させたり、他の構造体のメンバに含めたりなど、使い方次第でよりCueの管理がしやすくなると思います。ぜひいろいろな使い方を工夫してみてください!
また、CRIADXでは、公式のDiscordコミュニティも随時公開されています。
「こんなことはできる?」
「不具合が解消しない!」
「他の人がどんな使い方をしているのか知りたい!」
など、気になることや知りたいことを、開発スタッフに直接質問することもできます。
イベント情報等もこちらで告知しておりますので、ご興味のある方は、ぜひご参加ください!