サウンド再生にAdx2を使う


概要

宴のサウンド再生で、Adx2を使うための拡張サンプルです。
Adx2は多くのゲームで使われているサウンドミドルウェアで、無償版のAdx2Leというのもあります。
宴のサウンド再生はUnityの標準機能を使っていますが、フルボイスのゲームなどではファイルサイズが大きすぎる時があります。
そういったときはAdx2を使うとファイルサイズを抑えたり、ほかにも様々な機能を使うことができます。

準備

宴2

宴2のAdx2Le対応の拡張スクリプトをDLしてください。

宴3

宴のバージョンによって若干違います。バージョンにあったものをDLしてください。
(.unitypackageはブラウザによってはクリックしただけではDLできないので、リンク先をコピーするなどしてDLしてください。)
宴3.5.3~
http://madnesslabo.net/UtageSample/Utage3.5.3ForAdx2.unitypackage

古いバージョン
宴3.0.1~3.0.6
宴3.0.7
宴3.0.8~
宴3.0.8~(awbファイルロード追加)
宴3.4.0~

Adx2プラグイン

また、実行にはAdx2Adx2LeのUnity対応プラグインが別途必要になりますので、そちらも入手してください。

この拡張スクリプトは宴のユーザーであれば無償で利用可能ですが、Adx2はCRIミドルウェアの製品ですのでそちらのライセンスに従ってください。

導入ついて、詳しくはこちらがわかりやすいかと
資料内ではUnityProが必須となっていますが、Unity5からは無料版のUnityでも使用可能になっています。

最新情報などさらに詳しい情報はこちらがおすすめです。
サウンド助け合い所

シーン内にAdx関連のオブジェクトを作成


Adxの再生に必要なオブジェクトをシーンに内に作成します。
作り方などに関してはAdx公式のドキュメントなどで確認してください。

Adx2LeForUtageをAddComponent

サンプルシーンでは設定済みですが、実際に自分で作ったシーンにAdxを使う場合には、
シーン内の任意のオブジェクトに、「Adx2LeForUtage」コンポーネントをAddComponentします。

名前 説明
Enable Fade On Data Trueにすると、サウンド系コマンドのArg5、Arg6で設定する「フェード時間」は無視されて、AtomCraftのReactで設定した値でフェードがされる。
AtomCraftのReactに値を設定せずに、コマンドのフェード時間が適用する場合はFalseに。基本的にはTrueを推奨
Ignore Config Master Volume Trueにすると、コンフィグ画面から設定するマスターボリュームの設定を無視する。
宴のコンフィグのマスターボリュームを使わずに、自分で管理したいときはTrueに
Ignore Duck Volume Trueにすると、ダッキング(ボイス再生中にBGMや環境音のボリュームを下げる)機能を無効化する。
Adxにはダッキング機能があるので、チェックを入れてそちらを使うことを推奨。
宴3でのみ使用可能
Debug Log コンソールにデバッグログを出力します
Default Que Sheet エクセルデータ上で、キューシートの指定がなかった場合に使用する名前。キューシートを一つしか使わないならこの設定だけでも可

また、サウンドマネージャーのシステム部分を上書きするためのコールバックを登録する必要があります。

サウンドシートの書き方

基本的には、宴のサウンドの書きかたと同じですが、
CueSheet名が必要になるります。
基本的にはこのように、サウンドシートにCueSheet列を追加してCueSheet名を記述してください。

また、ファイル名から拡張子を除いたものがCueNameになります。

ボイスは各シナリオシートにCueSheet列を追加して、ファイル名と一緒に指定してください。

拡張コードの説明

Adx2LeForUtage.csの主要なコードはこのようになっています。
サウンドの再生システムと、ファイルロード部分をAdx2用の上書きするという設計です。
実際に再生する部分はAdx2LeSoundManagerSystem、ファイルロード部分はAdx2AssetFileになります。
割と単純に拡張できるようにしてありますので、必要に応じて調整してみてください。
また、Adx2以外の自作のサウンド再生の仕組みを作る場合にも同じやり方で拡張可能です。


		//サウンド再生システムをAdx2用に上書き
		public void OnCreateSoundSystem(SoundManager soundManager)
		{
			soundManager.BgmVolumeFilterOfPlayingVoice = 1.0f;	//ボイス再生中のボイスの音量下げは無効化
			soundManager.System = new Adx2LeSoundManagerSystem(this);
		}

		//サウンドファイルのロードを上書きするコールバックを登録
		void Awake()
		{
			AssetFileManager.GetCustomLoadManager().OnFindAsset += FindAsset;
		}

		//サウンドファイルのロードをAdx2用に上書き
		void FindAsset(string filePath, AssetFileManagerSettings settings, StringGridRow rowData, ref AssetFile asset)
		{
			AssetFileSetting setting = settings.FindSettingFromPath(filePath);
			if (setting.FileType == AssetFileType.Sound)
			{
				asset = new Adx2AssetFile(filePath, setting, rowData, this);
			}
		} 

注意点

Adx2とUnity標準のAudioClipは併用できません。
なのでボタンのクリック音などは、別途Adx2でSEを再生する必要があります。
Adx2をUnityで使用する一般的な使い方に関してはこちらではサポートしませんので、ドキュメントやネット上の情報などを参考にして実装してみてください。


サンプルシーンでは、ボタンSEでAudioClipを使っているため、エラーメッセージがでます。
Adx2を使うように実装をしてください。

AddressableAssetFileSystemと併用

上記の拡張はAddressable Assets Systemには対応していません。
Addressable Assets Systemと併用して動かす場合のフォローはできていないのですが、有志の方が対応方法をまとめてくれています。
CRI ADX2 + Addressables + 宴のマシマシセットを動かす

最後に

宴のAdx2LEの拡張の開発については株式会社enishよりのご依頼で開発させていただきました。

また、宴の拡張依頼があれば随時受け付けておりますのでよろしくお願いします。