UnityでWwiseのカスタムプラットフォームを使う

デフォルトで、Wwise Unity Integrationは対象Wwiseプロジェクトに設定された全てのプラットフォームにデフォルトの名前が付いているものとします。プラットフォームに別の名前を付ける場合や、ベースプラットフォーム用に複数のカスタムプラットフォームを設定する場合は、対応できるようにC#スクリプトを作成する必要があります。

Note.gif
注記:このページでは、SoundBankが生成されるサブフォルダの名前がプラットフォームと同じものとしています。なお、そうでない場合は GetPlatformName メソッドで返される文字列が実際はゲーム中のSoundBankサブフォルダ名として使用されています。

カスタムプラットフォームの定義

デフォルトのプラットフォーム解消スクリプトの入っているファイルの場所は UNITY_PROJECT_ROOT/Assets/Wwise/Deployment/Components/AkBasePathGetter.csです。GetPlatformName() メソッドに見られるように、全てのプラットフォームのデフォルト名がこのファンクションで返却されます。自分で設定したプラットフォーム名を使いたい場合は、このパーシャルクラスを拡張する必要があります。

この例では、iOSプラットフォームのユースケースだけを見ます。iOSのベースプラットフォーム用に3つの異なるカスタムプラットフォームを用意する場合を考えます: iPod用、iPhone用、iPad用にそれぞれ1つずつとします。

  1. まずWwiseプロジェクト内で、次の3つの異なるプラットフォームをPlatform Managerで追加する: "iPod", "iPhone", "iPad"。(WwiseのPlatform Managerについては、WwiseドキュメントのWwise Help > Setting Up Your Projects > Managing Platformsを参照。)
  2. 次にUnityで、AkBasePathGetterを拡張するC#スクリプトを作成します。このファイルの中身は、以下のようになります:
    public partial class AkBasePathGetter
    {
    #if UNTIY_IOS
        static partial void GetCustomPlatformName(ref string platformName)
        {
            switch(UnityEngine.iOS.Device.generation)
            {
                case UnityEngine.iOS.DeviceGeneration.iPodTouch1Gen:
                case UnityEngine.iOS.DeviceGeneration.iPodTouch2Gen:
                case UnityEngine.iOS.DeviceGeneration.iPodTouch3Gen:
                case UnityEngine.iOS.DeviceGeneration.iPodTouch4Gen:
                case UnityEngine.iOS.DeviceGeneration.iPodTouch5Gen:
                case UnityEngine.iOS.DeviceGeneration.iPodTouchUnknown:
                    platformName = "iPod";
                    break;
    
                case UnityEngine.iOS.DeviceGeneration.iPad1Gen:
                case UnityEngine.iOS.DeviceGeneration.iPad2Gen:
                case UnityEngine.iOS.DeviceGeneration.iPad3Gen:
                case UnityEngine.iOS.DeviceGeneration.iPadMini1Gen:
                case UnityEngine.iOS.DeviceGeneration.iPad4Gen:
                case UnityEngine.iOS.DeviceGeneration.iPadAir1:
                case UnityEngine.iOS.DeviceGeneration.iPadMini2Gen:
                case UnityEngine.iOS.DeviceGeneration.iPadMini3Gen:
                case UnityEngine.iOS.DeviceGeneration.iPadAir2:
                case UnityEngine.iOS.DeviceGeneration.iPadUnknown:
                    platformName = "iPad";
                    break;
    
                case UnityEngine.iOS.DeviceGeneration.iPhone:
                case UnityEngine.iOS.DeviceGeneration.iPhone3G:
                case UnityEngine.iOS.DeviceGeneration.iPhone3GS:
                case UnityEngine.iOS.DeviceGeneration.iPhone4:
                case UnityEngine.iOS.DeviceGeneration.iPhone4S:
                case UnityEngine.iOS.DeviceGeneration.iPhone5:
                case UnityEngine.iOS.DeviceGeneration.iPhone5C:
                case UnityEngine.iOS.DeviceGeneration.iPhone5S:
                case UnityEngine.iOS.DeviceGeneration.iPhone6:
                case UnityEngine.iOS.DeviceGeneration.iPhone6Plus:
                case UnityEngine.iOS.DeviceGeneration.iPhoneUnknown:
                default:
                    platformName = "iPhone";
                    break;
            }
        }
    #endif
    }
    
    Note.gif
    注記:platformName が変更されずそのままの場合は、起動中のUnityプラットフォームのデフォルトプラットフォーム名が使われます。
  3. (a) AkBuildPreprocessorを拡張するC#を作成するか、(b) AkBuildPreprocessor内でこの機能を使うC#スクリプトを作成します。ファイルの中身は、以下のようにすることができます:
    public class WwiseIOSBuildPreprocessor : IPreprocessBuild, IPostprocessBuild
    {
        public int callbackOrder { get { return 0; } }
        string iPodDestinationSoundBankFolder = string.Empty;
        string iPadDestinationSoundBankFolder = string.Empty;
        string iPhoneDestinationSoundBankFolder = string.Empty;
        
        public void OnPreprocessBuild(BuildTarget target, string path)
        {
            if (target == BuildTarget.iOS)
            {
                AkBuildPreprocessor.CopySoundbanks(true, "iPod",   iPodDestinationSoundBankFolder);
                AkBuildPreprocessor.CopySoundbanks(true, "iPad",   iPadDestinationSoundBankFolder);
                AkBuildPreprocessor.CopySoundbanks(true, "iPhone", iPhoneDestinationSoundBankFolder);
            }
        }
    
        public void OnPostprocessBuild(BuildTarget target, string path)
        {
            DeleteSoundbanks(iPodDestinationSoundBankFolder);
            DeleteSoundbanks(iPadDestinationSoundBankFolder);
            DeleteSoundbanks(iPhoneDestinationSoundBankFolder);
        }
    }
    
  4. または、Wwiseで"iPhone"、"iPod"、"iPad"の3つのプラットフォーム全てのSoundBankを生成して、その結果できた3つのフォルダを、UNITY_PROJECT_ROOT/Assets/StreamingAssets/Audio/GeneratedSoundBanksにコピーします。
  5. Unityで、ゲームをiOSプラットフォーム用にビルドする。
  6. これ以降はデバイスの種類に応じて異なるSoundBankセットが採用されることになる。
Wwise Unity Integrationに対してTue Dec 4 10:52:20 2018に生成されました。  doxygen 1.6.3