目录

Wwise Unity Integration Documentation
在 Unity 中使用 Wwise 自定义平台

默认情况下,Wwise Unity 集成假设关联的 Wwise 工程中的定义的平台用的都是默认名称。如果您希望给平台自定义的名称或为一个基本平台定义多个自定义平台,则将需要创建一个 C# 脚本来实现此目标。

备注: 在此页面中,假设生成 SoundBank 的子文件夹与您的平台名称相同。如果名称不同,那么请注意,GetPlatformName 方法返回的字符串实际上被用作游戏中的 SoundBank 子文件夹名。

定义自定义平台

默认的平台解析脚本可以在文件 UNITY_PROJECT_ROOT/Assets/Wwise/Deployment/Components/AkBasePathGetter.cs 中找到。在 GetPlatformName() 方法中可以看到,所有平台的默认名称都由这个函数返回。如果您希望采用自己命名的平台名称,则必须扩展这个不完全(partial)类。

示例

这个示例只涵盖了 iOS 平台的一个用例。在这个例子中,您希望有三个不同的自定义平台:一个是 ipod,一个是 iphone,一个是 ipad。

  1. 首先,在 Wwise 工程中,您将在 Platform Manager(平台管理器)中添加三个不同的平台:"iPod"、"iPhone" 和 "iPad"。(关于 Wwise 的 Platform Manager 的更多信息,请参见 Wwise Help > 设置工程 > 管理多平台 一节)。
  2. 然后在 Unity 中,创建一个 C# 脚本,它会扩展 AkBasePathGetter。该文件的内容类似于:
    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
    }
    备注: 如果 platformName 未修改,则当前激活状态的 Unity 平台将使用默认平台名称。
  3. 或者,(a)创建一个 C::,它将扩展 AkBuildPreprocessor,或(b)创建一个 C::,它将使用 AkBuildPreprocessor 内的功能。该文件的内容可以类似于:
    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" 生成 SoundBank,将生成的三个文件夹复制到 UNITY_PROJECT_ROOT/Assets/StreamingAssets/Audio/GeneratedSoundBanks 中。
  5. 在 Unity 中,为 iOS 平台构建您的游戏。
  6. 从现在开始,根据使用的设备类型,将使用不同的 SoundBank 集合。