バージョン
DLCをWwiseでサポートするデフォルトの手段は、File Packageの利用です。機能の説明は、Authoringに関するドキュメント: Wwise > Help > Finishing Your Project > Managing File Packages > Downloadable Content Overviewにあります。パッケージに入れるBNKやWEMの置換用ファイルや追加ファイルについて、またそれらを自由にロードしたりアンロードしたりすることでDLCを有効・無効にする方法などが、簡単に説明されています。このパッケージフォーマットの使用は必須ではありませんが、現在のWwise/Unityプラグインに組み込まれて提供されています。自分のパッケージフォーマットを書くには、新しいLow-Level IOを書いてデフォルトのものと置き換えてください。
Unityでパッケージに使うには、パッケージをAkInitializerのプロパティとしてBase Pathに設定したパスに置くだけです。次に、 AkSoundEngine.LoadFilePackage()
をコールします。Wwiseはファイルをロードする時に、必ずファイルパッケージ経由で、逆順でロード(最後に追加したものを最初にサーチ)しようとします。
この方法は、ゲーム出荷後にBase Pathにディスク書き込みができる全てのプラットフォームで利用できます。残念ながら、iOSやAndroidはこれが行えません。
AndroidとiOSの場合は全てのデータをリードオンリーのファイルシステムにバンドル化するため、パッケージを別のディレクトリに入れる必要があります。これを行うには AkSoundEngine.LoadFilePackage()
の前に、 AkSoundEngine.AddBasePath()
をコールします。複数のパスを追加でき、最後に追加したものを最初にサーチします。制約事項については、該当するOperating Systemドキュメントを確認してください。以下のコードは、ファイルを保存する場所のパスを選択するためのコードの例です:
#if UNITY_IPHONE string fileNameBase = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf('/')); fileName = fileNameBase.Substring(0, fileNameBase.LastIndexOf('/')) + "/Documents/" + FILE_NAME; #elif UNITY_ANDROID fileName = Application.persistentDataPath + "/" + FILE_NAME ; #else fileName = Application.dataPath + "/" + FILE_NAME; #endif
なおAndroidでは、sdcardや同様のメモリデバイスなど他にも書き込み可能なパスがいくつかあります。
UnityのWWWクラスを利用して、DLCオーディオファイルを取得したり直接ロードしたりすることも可能です。これはメモリ内にバンクをロードして行い、AkMemBankLoader.csで実現できる通りです。既存バンクを新バンクに置き換える場合は、既存のバンクを最初に正しくアンロードすることが重要であり、このコードをWwise IOシステムが認識していないため同じバンクが間違えてロードされているのか、置換しようとしているのか、判断できないからです。