public static bool SupportsScriptsOnlyBuild(BuildTargetGroup targetGroup, BuildTarget target) { IBuildPostprocessor buildPostProcessor = ModuleManager.GetBuildPostProcessor(targetGroup, target); return(buildPostProcessor != null && buildPostProcessor.SupportsScriptsOnlyBuild()); }
internal static void InstallPlugins(string destPluginFolder, BuildTarget target) { string text = "Assets/Plugins"; IBuildPostprocessor buildPostProcessor = ModuleManager.GetBuildPostProcessor(target); if (buildPostProcessor != null) { bool flag; string[] array = buildPostProcessor.FindPluginFilesToCopy(text, out flag); if (array != null) { if (array.Length > 0 && !Directory.Exists(destPluginFolder)) { Directory.CreateDirectory(destPluginFolder); } string[] array2 = array; for (int i = 0; i < array2.Length; i++) { string text2 = array2[i]; if (Directory.Exists(text2)) { string target2 = Path.Combine(destPluginFolder, text2); FileUtil.CopyDirectoryRecursive(text2, target2); } else { string fileName = Path.GetFileName(text2); if (flag) { string directoryName = Path.GetDirectoryName(text2.Substring(text.Length + 1)); string text3 = Path.Combine(destPluginFolder, directoryName); string to = Path.Combine(text3, fileName); if (!Directory.Exists(text3)) { Directory.CreateDirectory(text3); } FileUtil.UnityFileCopy(text2, to); } else { string to2 = Path.Combine(destPluginFolder, fileName); FileUtil.UnityFileCopy(text2, to2); } } } return; } } bool flag2 = false; List <string> list = new List <string>(); bool flag3 = target == BuildTarget.StandaloneOSXIntel || target == BuildTarget.StandaloneOSXIntel64 || target == BuildTarget.StandaloneOSXUniversal; bool copyDirectories = flag3; string extension = string.Empty; string debugExtension = string.Empty; if (flag3) { extension = ".bundle"; list.Add(string.Empty); } else { if (target == BuildTarget.StandaloneWindows) { extension = ".dll"; debugExtension = ".pdb"; PostprocessBuildPlayer.AddPluginSubdirIfExists(list, text, PostprocessBuildPlayer.subDir32Bit); } else { if (target == BuildTarget.StandaloneWindows64) { extension = ".dll"; debugExtension = ".pdb"; PostprocessBuildPlayer.AddPluginSubdirIfExists(list, text, PostprocessBuildPlayer.subDir64Bit); } else { if (target == BuildTarget.StandaloneGLESEmu) { extension = ".dll"; debugExtension = ".pdb"; list.Add(string.Empty); } else { if (target == BuildTarget.StandaloneLinux) { extension = ".so"; PostprocessBuildPlayer.AddPluginSubdirIfExists(list, text, PostprocessBuildPlayer.subDir32Bit); } else { if (target == BuildTarget.StandaloneLinux64) { extension = ".so"; PostprocessBuildPlayer.AddPluginSubdirIfExists(list, text, PostprocessBuildPlayer.subDir64Bit); } else { if (target == BuildTarget.StandaloneLinuxUniversal) { extension = ".so"; list.Add(PostprocessBuildPlayer.subDir32Bit); list.Add(PostprocessBuildPlayer.subDir64Bit); flag2 = true; } else { if (target == BuildTarget.PS3) { extension = ".sprx"; list.Add(string.Empty); } else { if (target == BuildTarget.Android) { extension = ".so"; list.Add("Android"); } else { if (target == BuildTarget.BB10) { extension = ".so"; list.Add("BlackBerry"); } } } } } } } } } } foreach (string current in list) { if (flag2) { PostprocessBuildPlayer.InstallPluginsByExtension(Path.Combine(text, current), extension, debugExtension, Path.Combine(destPluginFolder, current), copyDirectories); } else { PostprocessBuildPlayer.InstallPluginsByExtension(Path.Combine(text, current), extension, debugExtension, destPluginFolder, copyDirectories); } } }
public static bool SupportsLz4Compression(BuildTargetGroup targetGroup, BuildTarget target) { IBuildPostprocessor buildPostProcessor = ModuleManager.GetBuildPostProcessor(targetGroup, target); return(buildPostProcessor != null && buildPostProcessor.SupportsLz4Compression()); }
void ShowBuildTargetSettings() { EditorGUIUtility.labelWidth = Mathf.Min(180, (position.width - 265) * 0.47f); BuildTarget buildTarget = EditorUserBuildSettingsUtils.CalculateSelectedBuildTarget(); BuildTargetGroup buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup; BuildPlatform platform = BuildPlatforms.instance.BuildPlatformFromTargetGroup(buildTargetGroup); bool licensed = BuildPipeline.LicenseCheck(buildTarget); // Draw the group name GUILayout.Space(18); // Draw icon and text of title separately so we can control the space between them Rect r = GUILayoutUtility.GetRect(50, 36); r.x += 1; GUI.Label(new Rect(r.x + 3, r.y + 3, 32, 32), platform.title.image, GUIStyle.none); GUI.Toggle(r, false, platform.title.text, styles.platformSelector); GUILayout.Space(10); if (platform.targetGroup == BuildTargetGroup.WebGL && !BuildPipeline.IsBuildTargetSupported(platform.targetGroup, buildTarget)) { if (IntPtr.Size == 4) { GUILayout.Label("Building for WebGL requires a 64-bit Unity editor."); GUIBuildButtons(false, false, false, platform); return; } } string moduleName = Modules.ModuleManager.GetTargetStringFrom(buildTargetGroup, buildTarget); if (IsModuleNotInstalled(buildTargetGroup, buildTarget)) { GUILayout.Label(EditorGUIUtility.TextContent(string.Format(styles.noModuleLoaded, BuildPlatforms.instance.GetModuleDisplayName(buildTargetGroup, buildTarget)))); if (GUILayout.Button(styles.openDownloadPage, EditorStyles.miniButton, GUILayout.ExpandWidth(false))) { string url = GetPlaybackEngineDownloadURL(moduleName); Help.BrowseURL(url); } GUIBuildButtons(false, false, false, platform); return; } else if (Application.HasProLicense() && !InternalEditorUtility.HasAdvancedLicenseOnBuildTarget(buildTarget)) { // Show copy for using personal edition build targets with pro edition editor string infoText = string.Format(styles.infoText, BuildPlatforms.instance.GetBuildTargetDisplayName(buildTargetGroup, buildTarget)); GUILayout.BeginVertical(EditorStyles.helpBox); GUILayout.Label(infoText, EditorStyles.wordWrappedMiniLabel); GUILayout.BeginHorizontal(); if (GUILayout.Button(styles.eula, EditorStyles.miniButton)) { Application.OpenURL("http://unity3d.com/legal/eula"); } if (GUILayout.Button(string.Format(styles.addToYourPro, BuildPlatforms.instance.GetBuildTargetDisplayName(buildTargetGroup, buildTarget)), EditorStyles.miniButton)) { Application.OpenURL("http://unity3d.com/get-unity"); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); } GUIContent error = styles.GetDownloadErrorForTarget(buildTarget); if (error != null) { GUILayout.Label(error, EditorStyles.wordWrappedLabel); GUIBuildButtons(false, false, false, platform); return; } // Draw not licensed buy now UI if (!licensed) { string niceName = BuildPipeline.GetBuildTargetGroupDisplayName(buildTargetGroup); string licenseMsg = "Your license does not cover {0} Publishing."; string buttonMsg = "Go to Our Online Store"; if (BuildTargetDiscovery.PlatformHasFlag(buildTarget, TargetAttributes.IsConsole)) { licenseMsg += "Please see the {0} section of the Platform Module Installation documentation for more details."; buttonMsg = "Platform Module Installation"; } else if (BuildTargetDiscovery.PlatformHasFlag(buildTarget, TargetAttributes.IsStandalonePlatform)) { buttonMsg = ""; } GUIContent[] notLicensedMessage = { EditorGUIUtility.TextContent(string.Format(L10n.Tr(licenseMsg), niceName)), EditorGUIUtility.TextContent(L10n.Tr(buttonMsg)), new GUIContent(styles.shopURL) }; GUILayout.Label(notLicensedMessage[0], EditorStyles.wordWrappedLabel); GUILayout.Space(5); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (notLicensedMessage[1].text.Length != 0) { if (GUILayout.Button(notLicensedMessage[1])) { Application.OpenURL(notLicensedMessage[2].text); } } GUILayout.EndHorizontal(); GUIBuildButtons(false, false, false, platform); return; } // FIXME: WHY IS THIS ALL IN ONE FUNCTION?! // Draw the side bar to the right. Different options like specific Standalone player to build, profiling and debugging options, etc. string module = ModuleManager.GetTargetStringFrom(platform.targetGroup, buildTarget); IBuildWindowExtension buildWindowExtension = ModuleManager.GetBuildWindowExtension(module); if (buildWindowExtension != null) { buildWindowExtension.ShowPlatformBuildOptions(); } GUI.changed = false; GUI.enabled = true; bool enableBuildButton = buildWindowExtension != null?buildWindowExtension.EnabledBuildButton() : true; bool enableBuildAndRunButton = false; bool shouldDrawDebuggingToggle = buildWindowExtension != null?buildWindowExtension.ShouldDrawScriptDebuggingCheckbox() : true; bool shouldDrawExplicitNullChecksToggle = buildWindowExtension != null?buildWindowExtension.ShouldDrawExplicitNullCheckbox() : false; bool shouldDrawDivideByZeroChecksToggle = buildWindowExtension != null?buildWindowExtension.ShouldDrawExplicitDivideByZeroCheckbox() : false; bool shouldDrawArrayBoundsChecksToggle = buildWindowExtension != null?buildWindowExtension.ShouldDrawExplicitArrayBoundsCheckbox() : false; bool shouldDrawDevelopmentPlayerToggle = buildWindowExtension != null?buildWindowExtension.ShouldDrawDevelopmentPlayerCheckbox() : true; IBuildPostprocessor postprocessor = ModuleManager.GetBuildPostProcessor(buildTargetGroup, buildTarget); bool enableBuildScriptsOnly = (postprocessor != null ? postprocessor.SupportsScriptsOnlyBuild() : false); bool canInstallInBuildFolder = false; if (BuildPipeline.IsBuildTargetSupported(buildTargetGroup, buildTarget)) { bool shouldDrawConnectProfilerToggle = buildWindowExtension != null?buildWindowExtension.ShouldDrawProfilerCheckbox() : true; GUI.enabled = shouldDrawDevelopmentPlayerToggle; if (shouldDrawDevelopmentPlayerToggle) { EditorUserBuildSettings.development = EditorGUILayout.Toggle(styles.debugBuild, EditorUserBuildSettings.development); } bool developmentBuild = EditorUserBuildSettings.development; GUI.enabled = developmentBuild; if (shouldDrawConnectProfilerToggle) { if (!GUI.enabled) { if (!developmentBuild) { styles.profileBuild.tooltip = "Profiling only enabled in Development Player"; } } else { styles.profileBuild.tooltip = ""; } EditorUserBuildSettings.connectProfiler = EditorGUILayout.Toggle(styles.profileBuild, EditorUserBuildSettings.connectProfiler); } GUI.enabled = developmentBuild; if (shouldDrawDebuggingToggle) { using (new EditorGUI.DisabledScope(buildWindowExtension != null ? buildWindowExtension.ShouldDisableManagedDebuggerCheckboxes() : false)) { EditorUserBuildSettings.allowDebugging = EditorGUILayout.Toggle(styles.allowDebugging, EditorUserBuildSettings.allowDebugging); // Not all platforms have native dialog implemented in Runtime\Misc\GiveDebuggerChanceToAttachIfRequired.cpp // Display this option only for developer builds bool shouldDrawWaitForManagedDebugger = buildWindowExtension != null?buildWindowExtension.ShouldDrawWaitForManagedDebugger() : false; if (EditorUserBuildSettings.allowDebugging && shouldDrawWaitForManagedDebugger) { var buildTargetName = BuildPipeline.GetBuildTargetName(buildTarget); bool value = EditorGUILayout.Toggle(styles.waitForManagedDebugger, EditorUserBuildSettings.GetPlatformSettings(buildTargetName, kSettingDebuggingWaitForManagedDebugger) == "true"); EditorUserBuildSettings.SetPlatformSettings(buildTargetName, kSettingDebuggingWaitForManagedDebugger, value.ToString().ToLower()); } } if (EditorUserBuildSettings.allowDebugging && PlayerSettings.GetScriptingBackend(buildTargetGroup) == ScriptingImplementation.IL2CPP) { var apiCompatibilityLevel = PlayerSettings.GetApiCompatibilityLevel(buildTargetGroup); bool isDebuggerUsable = apiCompatibilityLevel == ApiCompatibilityLevel.NET_4_6 || apiCompatibilityLevel == ApiCompatibilityLevel.NET_Standard_2_0; if (!isDebuggerUsable) { EditorGUILayout.HelpBox("Script debugging is only supported with IL2CPP on .NET 4.x and .NET Standard 2.0 API Compatibility Levels.", MessageType.Warning); } } } if (shouldDrawExplicitNullChecksToggle) { // Force 'ExplicitNullChecks' to true if it's a development build. GUI.enabled = !developmentBuild; if (GUI.enabled == false) { EditorUserBuildSettings.explicitNullChecks = true; } EditorUserBuildSettings.explicitNullChecks = EditorGUILayout.Toggle(styles.explicitNullChecks, EditorUserBuildSettings.explicitNullChecks); // Undo force from above GUI.enabled = developmentBuild; } if (shouldDrawDivideByZeroChecksToggle) { // Force 'explicitDivideByZeroChecks' to true if it's a development build. GUI.enabled = !developmentBuild; if (GUI.enabled == false) { EditorUserBuildSettings.explicitDivideByZeroChecks = true; } EditorUserBuildSettings.explicitDivideByZeroChecks = EditorGUILayout.Toggle(styles.explicitDivideByZeroChecks, EditorUserBuildSettings.explicitDivideByZeroChecks); // Undo force from above GUI.enabled = developmentBuild; } if (shouldDrawArrayBoundsChecksToggle) { // Force 'explicitArrayBoundsChecks' to true if it's a development build. GUI.enabled = !developmentBuild; if (GUI.enabled == false) { EditorUserBuildSettings.explicitArrayBoundsChecks = true; } EditorUserBuildSettings.explicitArrayBoundsChecks = EditorGUILayout.Toggle(styles.explicitArrayBoundsChecks, EditorUserBuildSettings.explicitArrayBoundsChecks); // Undo force from above GUI.enabled = developmentBuild; } if (buildWindowExtension != null && enableBuildScriptsOnly) { buildWindowExtension.DoScriptsOnlyGUI(); } GUI.enabled = true; GUILayout.FlexibleSpace(); if (postprocessor != null && postprocessor.SupportsLz4Compression()) { var cmpIdx = Array.IndexOf(styles.compressionTypes, EditorUserBuildSettings.GetCompressionType(buildTargetGroup)); if (cmpIdx == -1) { cmpIdx = 1; // Lz4 by default. } cmpIdx = EditorGUILayout.Popup(styles.compressionMethod, cmpIdx, styles.compressionStrings); EditorUserBuildSettings.SetCompressionType(buildTargetGroup, styles.compressionTypes[cmpIdx]); } canInstallInBuildFolder = Unsupported.IsSourceBuild() && PostprocessBuildPlayer.SupportsInstallInBuildFolder(buildTargetGroup, buildTarget); if (enableBuildButton) { enableBuildAndRunButton = buildWindowExtension != null?buildWindowExtension.EnabledBuildAndRunButton() && !(EditorUserBuildSettings.installInBuildFolder) : !(EditorUserBuildSettings.installInBuildFolder); } } else { GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.BeginVertical(GUILayout.ExpandWidth(true)); GUILayout.Label(string.Format(L10n.Tr("{0} is not supported in this build.\nDownload a build that supports it."), BuildPipeline.GetBuildTargetGroupDisplayName(buildTargetGroup))); GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } if (buildTarget == BuildTarget.Android) { AndroidPublishGUI(); } GUIBuildButtons(buildWindowExtension, enableBuildButton, enableBuildAndRunButton, canInstallInBuildFolder, platform); }
internal static void InstallPlugins(string destPluginFolder, BuildTarget target) { string basePluginFolder = "Assets/Plugins"; IBuildPostprocessor buildPostProcessor = ModuleManager.GetBuildPostProcessor(target); if (buildPostProcessor != null) { bool flag; string[] strArray = buildPostProcessor.FindPluginFilesToCopy(basePluginFolder, out flag); if (strArray != null) { if ((strArray.Length > 0) && !Directory.Exists(destPluginFolder)) { Directory.CreateDirectory(destPluginFolder); } foreach (string str2 in strArray) { if (Directory.Exists(str2)) { string str3 = Path.Combine(destPluginFolder, str2); FileUtil.CopyDirectoryRecursive(str2, str3); } else { string fileName = Path.GetFileName(str2); if (flag) { string directoryName = Path.GetDirectoryName(str2.Substring(basePluginFolder.Length + 1)); string str6 = Path.Combine(destPluginFolder, directoryName); string to = Path.Combine(str6, fileName); if (!Directory.Exists(str6)) { Directory.CreateDirectory(str6); } FileUtil.UnityFileCopy(str2, to, true); } else { string str8 = Path.Combine(destPluginFolder, fileName); FileUtil.UnityFileCopy(str2, str8, true); } } } return; } } bool flag2 = false; List <string> subdirs = new List <string>(); bool flag3 = ((target == BuildTarget.StandaloneOSXIntel) || (target == BuildTarget.StandaloneOSXIntel64)) || (target == BuildTarget.StandaloneOSXUniversal); bool copyDirectories = flag3; string extension = string.Empty; string debugExtension = string.Empty; if (flag3) { extension = ".bundle"; subdirs.Add(string.Empty); } else if (target == BuildTarget.StandaloneWindows) { extension = ".dll"; debugExtension = ".pdb"; AddPluginSubdirIfExists(subdirs, basePluginFolder, subDir32Bit); } else if (target == BuildTarget.StandaloneWindows64) { extension = ".dll"; debugExtension = ".pdb"; AddPluginSubdirIfExists(subdirs, basePluginFolder, subDir64Bit); } else if (target == BuildTarget.StandaloneGLESEmu) { extension = ".dll"; debugExtension = ".pdb"; subdirs.Add(string.Empty); } else if (target == BuildTarget.StandaloneLinux) { extension = ".so"; AddPluginSubdirIfExists(subdirs, basePluginFolder, subDir32Bit); } else if (target == BuildTarget.StandaloneLinux64) { extension = ".so"; AddPluginSubdirIfExists(subdirs, basePluginFolder, subDir64Bit); } else if (target == BuildTarget.StandaloneLinuxUniversal) { extension = ".so"; subdirs.Add(subDir32Bit); subdirs.Add(subDir64Bit); flag2 = true; } else if (target == BuildTarget.PS3) { extension = ".sprx"; subdirs.Add(string.Empty); } else if (target == BuildTarget.Android) { extension = ".so"; subdirs.Add("Android"); } else if (target == BuildTarget.BlackBerry) { extension = ".so"; subdirs.Add("BlackBerry"); } foreach (string str11 in subdirs) { if (flag2) { InstallPluginsByExtension(Path.Combine(basePluginFolder, str11), extension, debugExtension, Path.Combine(destPluginFolder, str11), copyDirectories); } else { InstallPluginsByExtension(Path.Combine(basePluginFolder, str11), extension, debugExtension, destPluginFolder, copyDirectories); } } }