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); } }
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(); }
// 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 + "."); } } }