menu
 
版本
2017.2.10.6745

2024.1.4.8780

2023.1.12.8706

2022.1.18.8567

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624


menu_open

在 Unity 中使用 Wwise 自定义平台

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

info
备注: 在此页面中,假设生成 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
    }
    
    info
    备注: 如果 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 集合。
Generated at Mon Apr 15 18:03:48 2019 for Wwise Unity Integration by  doxygen 1.6.3

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅