最近のWwiseのUnityインテグレーションは親切で、ビルド時にbnkファイル一式を適切にコピー、破棄してくれる。ローカルの完結した環境ではとても便利なのだが、このままだとビルドサーバで動かない。
とはいえ、そのために独自にまるっと書き直すのもなんだかなーということで、既存の実装を極力利用しつつ、ビルドサーバ対応させてみた。
WwiseのBuildProcessに関わるファイル
- /Wwise/Editor/WwiseSetupWizard/AkBuildPreprocessor.cs
- /Wwise/Deployment/API/Handwritten/AkUtilities.cs
だが、 AkBuildPreprocessor.cs の実装の
else if (!AkUtilities.DirectoryCopy(sourceFolder, destinationFolder, true))
{
destinationFolder = null;
UnityEngine.Debug.LogError("WwiseUnity: Could not copy soundbank folder for <" + platformName + "> platform");
}
にフォールバック処理を追加
else if (
(!AkUtilities.DirectoryCopy(sourceFolder, destinationFolder, true))
||
(!AmWwiseUtilties.S3DirectoryCopy(sourceFolder, destinationFolder, true))
)
{
destinationFolder = null;
UnityEngine.Debug.LogError("WwiseUnity: Could not copy soundbank folder for <" + platformName + "> platform");
}
あとはフォールバック先で、S3からファイルを取得して、AkUtilities.DirectoryCopy() と同等になるよう.bnk一式を配置してやればOK。(ビルド後の削除はオリジナルの処理に任せてOK)
高級な機能も考えたが、とりあえず、失敗した時のフォールバックでS3からコピーする実装にしておけば、何も弄らずに、ローカル/ビルドサーバで両立できると見込んでこの実装で運用中。
S3からバイナリをロードする仕組みを一式作った( https://qiita.com/karinharp/items/f0c56b69be0c34c5fa30 )のは、だいたいこのため。