private static void SetupStaticPluginRegistration(UnityEditor.BuildTarget target)
    {
        if (!RequiresStaticPluginRegistration(target))
        {
            return;
        }

        string deploymentTargetName = GetPluginDeploymentPlatformName(target);

        var staticPluginRegistration = new StaticPluginRegistration(target);
        var importers = UnityEditor.PluginImporter.GetAllImporters();

        foreach (var pluginImporter in importers)
        {
            if (!pluginImporter.assetPath.Contains(WwisePluginFolder))
            {
                continue;
            }

            var splitPath = pluginImporter.assetPath.Split('/');

            // Path is Assets/Wwise/Deployment/Plugins/Platform. We need the platform string
            var pluginPlatform = splitPath[4];
            if (pluginPlatform != deploymentTargetName)
            {
                continue;
            }

            var pluginConfig = string.Empty;

            switch (pluginPlatform)
            {
            case "iOS":
            case "tvOS":
                pluginConfig = splitPath[5];
                break;

            case "Switch":
                if (SwitchBuildTarget == INVALID_BUILD_TARGET)
                {
                    continue;
                }

                pluginConfig = splitPath[6];

                var pluginArch = splitPath[5];
                if (pluginArch != "NX32" && pluginArch != "NX64")
                {
                    UnityEngine.Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                    continue;
                }
                break;

            default:
                UnityEngine.Debug.Log("WwiseUnity: Unknown platform: " + pluginPlatform);
                continue;
            }

            if (pluginConfig != "DSP")
            {
                continue;
            }

            if (!IsPluginUsed(pluginPlatform, System.IO.Path.GetFileNameWithoutExtension(pluginImporter.assetPath)))
            {
                continue;
            }

            staticPluginRegistration.TryAddLibrary(pluginImporter.assetPath);
        }

        System.Collections.Generic.HashSet <AkPluginInfo> plugins = null;
        s_PerPlatformPlugins.TryGetValue(deploymentTargetName, out plugins);
        var missingPlugins = staticPluginRegistration.GetMissingPlugins(plugins);

        if (missingPlugins.Count == 0)
        {
            if (plugins == null)
            {
                UnityEngine.Debug.LogWarningFormat("WwiseUnity: The activated Wwise plug-ins may not be correct. Could not read PluginInfo.xml for platform: {0}", deploymentTargetName);
            }

            staticPluginRegistration.TryWriteToFile();
        }
        else
        {
            UnityEngine.Debug.LogErrorFormat(
                "WwiseUnity: These plugins used by the Wwise project are missing from the Unity project: {0}. Please check folder Assets/Wwise/Deployment/Plugin/{1}.",
                string.Join(", ", missingPlugins.ToArray()), deploymentTargetName);
        }
    }
Esempio n. 2
0
    public static void ActivatePluginsForDeployment(BuildTarget target, bool Activate)
    {
        bool ChangedSomeAssets = false;

        StaticPluginRegistration staticPluginRegistration = (target == BuildTarget.iOS || target == BuildTarget.tvOS || target == SwitchBuildTarget) ? new StaticPluginRegistration(target) : null;

        //PluginImporter[] importers = PluginImporter.GetImporters(target);
        PluginImporter[] importers = PluginImporter.GetAllImporters();

        foreach (PluginImporter pluginImporter in importers)
        {
            if (!pluginImporter.assetPath.Contains(WwisePluginFolder))
            {
                continue;
            }

            string[] splitPath = pluginImporter.assetPath.Split('/');

            // Path is Assets/Wwise/Deployment/Plugins/Platform. We need the platform string
            string pluginPlatform = splitPath[4];
            if (pluginPlatform != GetPluginDeploymentPlatformName(target))
            {
                continue;
            }

            string pluginArch   = string.Empty;
            string pluginConfig = string.Empty;

            switch (pluginPlatform)
            {
            case "iOS":
            case "tvOS":
            case "PS4":
            case "XboxOne":
                pluginConfig = splitPath[5];
                break;

            case "Android":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];

                if (pluginArch == "armeabi-v7a")
                {
                    pluginImporter.SetPlatformData(BuildTarget.Android, "CPU", "ARMv7");
                }
                else if (pluginArch == "x86")
                {
                    pluginImporter.SetPlatformData(BuildTarget.Android, "CPU", "x86");
                }
                else
                {
                    Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                }
                break;

            case "Linux":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];

                if (pluginArch == "x86")
                {
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneLinux, "CPU", "x86");
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneLinux64, "CPU", "None");
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneLinuxUniversal, "CPU", "x86");
                }
                else if (pluginArch == "x86_64")
                {
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneLinux, "CPU", "None");
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneLinux64, "CPU", "x86_64");
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneLinuxUniversal, "CPU", "x86_64");
                }
                else
                {
                    Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                    continue;
                }

#if UNITY_2017_3_OR_NEWER
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSX, "CPU", "None");
#else
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXIntel, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXIntel64, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXUniversal, "CPU", "None");
#endif
                pluginImporter.SetPlatformData(BuildTarget.StandaloneWindows, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneWindows64, "CPU", "None");
                break;

            case "Mac":
                pluginConfig = splitPath[5];
                pluginImporter.SetPlatformData(BuildTarget.StandaloneLinux, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneLinux64, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneLinuxUniversal, "CPU", "None");

#if UNITY_2017_3_OR_NEWER
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSX, "CPU", "AnyCPU");
#else
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXIntel, "CPU", "AnyCPU");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXIntel64, "CPU", "AnyCPU");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXUniversal, "CPU", "AnyCPU");
#endif
                pluginImporter.SetPlatformData(BuildTarget.StandaloneWindows, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneWindows64, "CPU", "None");
                break;

            case "WSA":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];

                if (pluginArch == "WSA_UWP_Win32")
                {
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "AnySDK");
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "X86");
                }
                else if (pluginArch == "WSA_UWP_x64")
                {
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "AnySDK");
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "X64");
                }
                else if (pluginArch == "WSA_UWP_ARM")
                {
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "AnySDK");
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "ARM");
                }
                break;

            case "Windows":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];

                if (pluginArch == "x86")
                {
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneWindows, "CPU", "AnyCPU");
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneWindows64, "CPU", "None");
                }
                else if (pluginArch == "x86_64")
                {
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneWindows, "CPU", "None");
                    pluginImporter.SetPlatformData(BuildTarget.StandaloneWindows64, "CPU", "AnyCPU");
                }
                else
                {
                    Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                    continue;
                }

                pluginImporter.SetPlatformData(BuildTarget.StandaloneLinux, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneLinux64, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneLinuxUniversal, "CPU", "None");
#if UNITY_2017_3_OR_NEWER
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSX, "CPU", "None");
#else
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXIntel, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXIntel64, "CPU", "None");
                pluginImporter.SetPlatformData(BuildTarget.StandaloneOSXUniversal, "CPU", "None");
#endif
                break;

            case "Switch":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];

                if (SwitchBuildTarget == INVALID_BUILD_TARGET)
                {
                    continue;
                }

                if (pluginArch != "NX32" && pluginArch != "NX64")
                {
                    Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                    continue;
                }
                break;

            default:
                Debug.Log("WwiseUnity: Unknown platform: " + pluginPlatform);
                continue;
            }

            bool AssetChanged = false;
            if (pluginImporter.GetCompatibleWithAnyPlatform())
            {
                pluginImporter.SetCompatibleWithAnyPlatform(false);
                AssetChanged = true;
            }

            bool bActivate = true;
            if (pluginConfig == "DSP")
            {
                if (!IsPluginUsed(pluginPlatform, System.IO.Path.GetFileNameWithoutExtension(pluginImporter.assetPath)))
                {
                    bActivate = false;
                }
                else if (staticPluginRegistration != null)
                {
                    staticPluginRegistration.TryAddLibrary(pluginImporter.assetPath);
                }
            }
            else if (pluginConfig != GetCurrentConfig())
            {
                bActivate = false;
            }

            if (!bActivate && target == BuildTarget.WSAPlayer)
            {
                // Workaround for TLS ALLOCATOR ALLOC_TEMP_THREAD ERROR: We need to explicitly deactivate the plugins for WSA
                // even if they are already reported as deactivated. If we don't, we get the ALLOC_TEMP_THREAD errors for
                // some reason...
                AssetChanged = true;
            }
            else
            {
                AssetChanged |= (pluginImporter.GetCompatibleWithPlatform(target) == !bActivate || !Activate);
            }

            pluginImporter.SetCompatibleWithPlatform(target, bActivate && Activate);

            if (AssetChanged)
            {
                ChangedSomeAssets = true;
                AssetDatabase.ImportAsset(pluginImporter.assetPath);
            }
        }

        if (ChangedSomeAssets && staticPluginRegistration != null)
        {
            staticPluginRegistration.TryWriteToFile();
        }
    }
    private static void SetupStaticPluginRegistration(UnityEditor.BuildTarget target)
    {
        if (!RequiresStaticPluginRegistration(target))
        {
            return;
        }

        var staticPluginRegistration = new StaticPluginRegistration(target);
        var importers = UnityEditor.PluginImporter.GetAllImporters();

        foreach (var pluginImporter in importers)
        {
            if (!pluginImporter.assetPath.Contains(WwisePluginFolder))
            {
                continue;
            }

            var splitPath = pluginImporter.assetPath.Split('/');

            // Path is Assets/Wwise/Deployment/Plugins/Platform. We need the platform string
            var pluginPlatform = splitPath[4];
            if (pluginPlatform != GetPluginDeploymentPlatformName(target))
            {
                continue;
            }

            var pluginConfig = string.Empty;

            switch (pluginPlatform)
            {
            case "iOS":
            case "tvOS":
                pluginConfig = splitPath[5];
                break;

            case "Switch":
                if (SwitchBuildTarget == INVALID_BUILD_TARGET)
                {
                    continue;
                }

                pluginConfig = splitPath[6];

                var pluginArch = splitPath[5];
                if (pluginArch != "NX32" && pluginArch != "NX64")
                {
                    UnityEngine.Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                    continue;
                }
                break;

            default:
                UnityEngine.Debug.Log("WwiseUnity: Unknown platform: " + pluginPlatform);
                continue;
            }

            if (pluginConfig != "DSP")
            {
                continue;
            }

            if (!IsPluginUsed(pluginPlatform, System.IO.Path.GetFileNameWithoutExtension(pluginImporter.assetPath)))
            {
                continue;
            }

            staticPluginRegistration.TryAddLibrary(pluginImporter.assetPath);
        }

        staticPluginRegistration.TryWriteToFile();
    }
Esempio n. 4
0
    // Properly set the platforms for Ak plugins. If platformToActivate is set to all platforms
    // will be activated.
    public static void ActivatePlugins(string configToActivate, bool Activate)
    {
        PluginImporter[] importers         = PluginImporter.GetAllImporters();
        bool             ChangedSomeAssets = false;

        StaticPluginRegistration iOSStaticPluginRegistration    = new StaticPluginRegistration(BuildTarget.iOS);
        StaticPluginRegistration SwitchStaticPluginRegistration = new StaticPluginRegistration(SwitchBuildTarget);

        foreach (PluginImporter pluginImporter in importers)
        {
            if (pluginImporter.assetPath.StartsWith("Assets/Plugins", StringComparison.CurrentCultureIgnoreCase) && pluginImporter.assetPath.Contains("AkSoundEngine"))
            {
                AssetDatabase.DeleteAsset(pluginImporter.assetPath);
                continue;
            }

            if (!pluginImporter.assetPath.Contains(WwisePluginFolder))
            {
                continue;
            }

            string[] splitPath = pluginImporter.assetPath.Split('/');

            // Path is Assets/Wwise/Deployment/Plugins/Platform. We need the platform string
            string pluginPlatform = splitPath[4];

            // Architecture and configuration (Debug, Profile, Release) are platform-dependent
            string             pluginArch   = string.Empty;
            string             pluginConfig = string.Empty;
            string             editorCPU    = string.Empty;
            string             editorOS     = string.Empty;
            List <BuildTarget> targetsToSet = new List <BuildTarget>();
            bool setEditor = false;
            switch (pluginPlatform)
            {
            case "Android":
                pluginConfig = splitPath[6];
                pluginArch   = splitPath[5];
                targetsToSet.Add(BuildTarget.Android);
                if (pluginArch == "armeabi-v7a")
                {
                    pluginImporter.SetPlatformData(BuildTarget.Android, "CPU", "ARMv7");
                }
                else if (pluginArch == "x86")
                {
                    pluginImporter.SetPlatformData(BuildTarget.Android, "CPU", "x86");
                }
                else
                {
                    Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                }
                break;

            case "iOS":
                pluginConfig = splitPath[5];
                targetsToSet.Add(BuildTarget.iOS);
                break;

            case "tvOS":
                pluginConfig = splitPath[5];
                targetsToSet.Add(BuildTarget.tvOS);
                break;

            case "Linux":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];
                if (pluginArch == "x86")
                {
                    targetsToSet.Add(BuildTarget.StandaloneLinux);
                    SetStandaloneTarget(pluginImporter, BuildTarget.StandaloneLinux);
                }
                else if (pluginArch == "x86_64")
                {
                    targetsToSet.Add(BuildTarget.StandaloneLinux64);
                    SetStandaloneTarget(pluginImporter, BuildTarget.StandaloneLinux64);
                }
                else
                {
                    Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                }
                targetsToSet.Add(BuildTarget.StandaloneLinuxUniversal);
                break;

            case "Mac":
                pluginConfig = splitPath[5];
                SetStandaloneTarget(pluginImporter, BuildTarget.StandaloneOSXIntel);
                SetStandaloneTarget(pluginImporter, BuildTarget.StandaloneOSXIntel64);
                targetsToSet.Add(BuildTarget.StandaloneOSXIntel);
                targetsToSet.Add(BuildTarget.StandaloneOSXIntel64);
                targetsToSet.Add(BuildTarget.StandaloneOSXUniversal);
                editorCPU = "AnyCPU";
                editorOS  = "OSX";
                setEditor = true;
                break;

            case "WSA":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];
                targetsToSet.Add(BuildTarget.WSAPlayer);

                if (pluginArch == "WSA_UWP_Win32")
                {
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "UWP");
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "X86");
                }
                else if (pluginArch == "WSA_UWP_x64")
                {
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "UWP");
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "X64");
                }
                else if (pluginArch == "WSA_UWP_ARM")
                {
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "UWP");
                    pluginImporter.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "ARM");
                }
                break;

            case "PS4":
                pluginConfig = splitPath[5];
                targetsToSet.Add(BuildTarget.PS4);
                break;

            case "Vita":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];
                targetsToSet.Add(BuildTarget.PSP2);
                break;

            case "Windows":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];
                if (pluginArch == "x86")
                {
                    targetsToSet.Add(BuildTarget.StandaloneWindows);
                    SetStandaloneTarget(pluginImporter, BuildTarget.StandaloneWindows);
                    editorCPU = "X86";
                }
                else if (pluginArch == "x86_64")
                {
                    targetsToSet.Add(BuildTarget.StandaloneWindows64);
                    SetStandaloneTarget(pluginImporter, BuildTarget.StandaloneWindows64);
                    editorCPU = "X86_64";
                }
                else
                {
                    Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                }
                setEditor = true;
                editorOS  = "Windows";
                break;

            case "XboxOne":
                pluginConfig = splitPath[5];
                targetsToSet.Add(BuildTarget.XboxOne);
                break;

            case "Switch":
                pluginArch   = splitPath[5];
                pluginConfig = splitPath[6];

                if (SwitchBuildTarget == INVALID_BUILD_TARGET)
                {
                    continue;
                }

                if (pluginArch == "NX32" || pluginArch == "NX64")
                {
                    targetsToSet.Add(SwitchBuildTarget);
                }
                else
                {
                    Debug.Log("WwiseUnity: Architecture not found: " + pluginArch);
                }
                break;

            default:
                if (!pluginPlatform.Contains("_new"))
                {
                    Debug.Log("WwiseUnity: Unknown platform: " + pluginPlatform);
                }
                continue;
            }

            bool AssetChanged = false;

            if (pluginImporter.GetCompatibleWithAnyPlatform())
            {
                pluginImporter.SetCompatibleWithAnyPlatform(false);
                AssetChanged = true;
            }

            bool bActivate = true;
            if (pluginConfig == "DSP")
            {
                // For WSA, we use the plugin info for Windows, since they share banks.
                string pluginDSPPlatform = pluginPlatform == "WSA" ? "Windows" : pluginPlatform;

                if (!s_PerPlatformPlugins.ContainsKey(pluginDSPPlatform))
                {
                    continue;                       //XML not parsed, don't touch anything.
                }
                bActivate = IsPluginUsed(pluginDSPPlatform, Path.GetFileNameWithoutExtension(pluginImporter.assetPath));
            }
            else
            {
                bActivate = pluginConfig == configToActivate;
            }

            if (pluginPlatform == "Vita")
            {
#if AK_ARCH_VITA_HW
                bActivate = (pluginArch == "HW") ? bActivate : false;
#else
                bActivate = (pluginArch == "SW") ? bActivate : false;
#endif
            }

            if (!bActivate)
            {
                // This is not the configuration we want to activate, make sure it is deactivated
                foreach (BuildTarget target in targetsToSet)
                {
                    AssetChanged |= pluginImporter.GetCompatibleWithPlatform(target);
                    pluginImporter.SetCompatibleWithPlatform(target, false);
                }
                if (setEditor)
                {
                    AssetChanged |= pluginImporter.GetCompatibleWithEditor();
                    pluginImporter.SetCompatibleWithEditor(false);
                }
            }
            else
            {
                // Set this plugin
                foreach (BuildTarget target in targetsToSet)
                {
                    AssetChanged |= (pluginImporter.GetCompatibleWithPlatform(target) != Activate);
                    pluginImporter.SetCompatibleWithPlatform(target, Activate);

                    StaticPluginRegistration PluginRegistration = null;

                    if (target == BuildTarget.iOS)
                    {
                        PluginRegistration = iOSStaticPluginRegistration;
                    }
                    else if (target == SwitchBuildTarget)
                    {
                        PluginRegistration = SwitchStaticPluginRegistration;
                    }

                    if (PluginRegistration != null)
                    {
                        PluginRegistration.TryAddLibrary(pluginImporter.assetPath);
                    }
                }

                if (setEditor)
                {
                    AssetChanged |= (pluginImporter.GetCompatibleWithEditor() != Activate);
                    pluginImporter.SetCompatibleWithEditor(Activate);
                    pluginImporter.SetEditorData("CPU", editorCPU);
                    pluginImporter.SetEditorData("OS", editorOS);
                }
            }

            if (AssetChanged)
            {
                ChangedSomeAssets = true;
                AssetDatabase.ImportAsset(pluginImporter.assetPath);
            }
        }

        if (ChangedSomeAssets)
        {
            iOSStaticPluginRegistration.TryWriteToFile("Wwise/Deployment/Plugins/iOS/DSP/AkiOSPlugins.cpp");
            SwitchStaticPluginRegistration.TryWriteToFile("Wwise/Deployment/Plugins/Switch/" + "NX64" + "/DSP/AkSwitchPlugins.cpp");

            if (Activate)
            {
                Debug.Log("WwiseUnity: Plugins successfully activated for " + configToActivate + ".");
            }
        }
    }