private void ConfigureBuildPlatforms(BuildEnvironmentConfig environmentConfiguration) { using (IndentLevelScope(1)) { EditorGUI.BeginChangeCheck(); var buildPlatformsString = SelectedPlatformsToString(environmentConfiguration.BuildPlatforms); var newBuildPlatforms = environmentConfiguration.BuildPlatforms; var showBuildPlatforms = EditorGUILayout.Foldout(environmentConfiguration.ShowBuildPlatforms, "Build Platforms: " + buildPlatformsString); if (showBuildPlatforms) { newBuildPlatforms = EnumFlagsToggleField(environmentConfiguration.BuildPlatforms); } var currentAdjustedPlatforms = newBuildPlatforms; if ((currentAdjustedPlatforms & SpatialBuildPlatforms.Windows32) != 0 && (currentAdjustedPlatforms & SpatialBuildPlatforms.Windows64) != 0) { EditorGUILayout.HelpBox(WorkerBuilder.IncompatibleWindowsPlatformsErrorMessage, MessageType.Error); } if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(target); Undo.RecordObject(target, "Configure build platforms for worker"); environmentConfiguration.ShowBuildPlatforms = showBuildPlatforms; environmentConfiguration.BuildPlatforms = newBuildPlatforms; } } }
private void ConfigureBuildOptions(BuildEnvironmentConfig environmentConfiguration) { using (IndentLevelScope(1)) { var buildOptionsString = EnumFlagToString(environmentConfiguration.BuildOptions); EditorGUI.BeginChangeCheck(); var showBuildOptions = EditorGUILayout.Foldout(environmentConfiguration.ShowBuildOptions, "Build Options: " + buildOptionsString); var newBuildOptions = environmentConfiguration.BuildOptions; if (showBuildOptions) { newBuildOptions = EnumFlagsToggleField(environmentConfiguration.BuildOptions); } if ((newBuildOptions & BuildOptions.EnableHeadlessMode) != 0 && (newBuildOptions & BuildOptions.Development) != 0) { EditorGUILayout.HelpBox( "\nYou cannot have both EnableHeadlessMode and Development in BuildOptions.\n\n" + "This will crash Unity Editor while building.\n", MessageType.Error); } if (EditorGUI.EndChangeCheck()) { // build options have changed EditorUtility.SetDirty(target); Undo.RecordObject(target, "Configure build options for worker"); environmentConfiguration.ShowBuildOptions = showBuildOptions; environmentConfiguration.BuildOptions = newBuildOptions; } } }
private void ConfigureBuildOptions(BuildEnvironmentConfig environmentConfiguration) { using (IndentLevelScope(1)) { EditorGUI.BeginChangeCheck(); var showBuildOptions = EditorGUILayout.Foldout(environmentConfiguration.ShowBuildOptions, "Build Options"); var newBuildOptions = environmentConfiguration.BuildOptions; if (showBuildOptions) { using (IndentLevelScope(1)) { var indentedHelpBox = new GUIStyle(EditorStyles.helpBox) { margin = { left = EditorGUI.indentLevel * 16 } }; using (new EditorGUILayout.VerticalScope(indentedHelpBox)) using (IndentLevelScope(-EditorGUI.indentLevel)) { var prevValue = (newBuildOptions & BuildOptions.Development) != 0; var newValue = EditorGUILayout.ToggleLeft("Development Build", prevValue); if (prevValue != newValue) { newBuildOptions ^= BuildOptions.Development; } prevValue = (newBuildOptions & BuildOptions.EnableHeadlessMode) != 0; newValue = EditorGUILayout.ToggleLeft("Headless Mode", prevValue); if (prevValue != newValue) { newBuildOptions ^= BuildOptions.EnableHeadlessMode; } } } } if ((newBuildOptions & BuildOptions.EnableHeadlessMode) != 0 && (newBuildOptions & BuildOptions.Development) != 0) { EditorGUILayout.HelpBox( "You cannot have both EnableHeadlessMode and Development build enabled.\n" + "This will crash the Unity Editor during the build.", MessageType.Error); } if ((newBuildOptions & BuildOptions.EnableHeadlessMode) != 0 && (environmentConfiguration.BuildPlatforms & ~SpatialBuildPlatforms.Linux) != 0) { EditorGUILayout.HelpBox( "EnableHeadlessMode is only available for Linux builds.", MessageType.Warning); } if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(target); Undo.RecordObject(target, "Configure build options for worker"); environmentConfiguration.ShowBuildOptions = showBuildOptions; environmentConfiguration.BuildOptions = newBuildOptions; } } }
private void DrawBuildTargets(BuildEnvironmentConfig env, int hash) { // Init cached UI state. var selectedBuildTarget = stateManager.GetStateObjectOrDefault <BuildTargetState>(hash ^ typeof(BuildTargetState).GetHashCode()); if (selectedBuildTarget.Choices == null || invalidateCachedContent > 0) { selectedBuildTarget.Choices = env.BuildTargets.Select(GetBuildTargetGuiContents).ToArray(); } // Draw available build targets. using (new EditorGUIUtility.IconSizeScope(SmallIconSize)) { selectedBuildTarget.Index = GUILayout.Toolbar(selectedBuildTarget.Index, selectedBuildTarget.Choices); } // Draw selected build target. var buildTarget = env.BuildTargets[selectedBuildTarget.Index]; var canBuildTarget = WorkerBuildData.BuildTargetsThatCanBeBuilt[buildTarget.Target]; var options = buildTarget.Options; var enabled = buildTarget.Enabled; var required = buildTarget.Required; using (var check = new EditorGUI.ChangeCheckScope()) using (new EditorGUILayout.VerticalScope(GUILayout.ExpandWidth(true))) { BuildConfigEditorStyle.DrawHorizontalLine(); EditorGUILayout.Space(); enabled = EditorGUILayout.Toggle("Build", enabled); if (!enabled) { required = false; } using (new EditorGUI.DisabledScope(!buildTarget.Enabled)) { required = EditorGUILayout.Toggle("Required", required); switch (buildTarget.Target) { case BuildTarget.StandaloneOSX: options = ConfigureOSX(buildTarget); break; case BuildTarget.StandaloneWindows: options = ConfigureWindows(buildTarget); break; case BuildTarget.iOS: options = ConfigureIOS(buildTarget); break; case BuildTarget.Android: options = ConfigureAndroid(buildTarget); break; case BuildTarget.StandaloneWindows64: options = ConfigureWindows(buildTarget); break; case BuildTarget.StandaloneLinux64: options = ConfigureLinux(buildTarget); break; } options = ConfigureCompression(options); } if (!canBuildTarget) { EditorGUILayout.HelpBox( $"Your Unity Editor is missing build support for {buildTarget.Target.ToString()}.\n" + "Please add the missing build support options to your Unity Editor", buildTarget.Required ? MessageType.Error : MessageType.Warning); } if (check.changed) { RecordUndo("Worker build options"); env.BuildTargets[selectedBuildTarget.Index] = new BuildTargetConfig(buildTarget.Target, options, enabled, required); selectedBuildTarget.Choices = null; } } }
private void DrawBuildTargets(BuildEnvironmentConfig env, int hash) { // Build a mapping from the 'build target' position in the toolbar to it's position in the 'BuildTargets' array. // We do this since sometimes there are different number of targets in the BuildTargets array and those // in the toolbar as some targets are deprecated if (toolbarMapping.Count == 0) { var toolbarIndex = 0; for (var buildTargetIndex = 0; buildTargetIndex < env.BuildTargets.Count; buildTargetIndex++) { if (!env.BuildTargets[buildTargetIndex].Deprecated) { toolbarMapping.Add(toolbarIndex++, buildTargetIndex); } } } // Init cached UI state. var selectedBuildTarget = stateManager.GetStateObjectOrDefault <BuildTargetState>(hash ^ typeof(BuildTargetState).GetHashCode()); if (selectedBuildTarget.Choices == null || invalidateCachedContent > 0) { selectedBuildTarget.Choices = env.BuildTargets .Where(c => !c.Deprecated) .Select(GetBuildTargetGuiContents) .ToArray(); } // Draw available build targets. using (new EditorGUIUtility.IconSizeScope(SmallIconSize)) { selectedBuildTarget.Index = GUILayout.Toolbar(selectedBuildTarget.Index, selectedBuildTarget.Choices); } // Convert the index from the position selected in the toolbar to the position in the BuildTargets array var selectedTargetIndex = toolbarMapping[selectedBuildTarget.Index]; // Draw selected build target. var buildTarget = env.BuildTargets[selectedTargetIndex]; var canBuildTarget = BuildSupportChecker.CanBuildTarget(buildTarget.Target); var options = buildTarget.Options; var enabled = buildTarget.Enabled; var required = buildTarget.Required; // Pick the current backend based on the current build target var scriptingImplementation = buildTarget.ScriptingImplementation; using (var check = new EditorGUI.ChangeCheckScope()) using (new EditorGUILayout.VerticalScope(GUILayout.ExpandWidth(true))) { BuildConfigEditorStyle.DrawHorizontalLine(); EditorGUILayout.Space(); enabled = EditorGUILayout.Toggle("Build", enabled); if (!enabled) { required = false; } using (new EditorGUI.DisabledScope(!buildTarget.Enabled)) { required = EditorGUILayout.Toggle("Required", required); options = ConfigurePlatform(buildTarget.Target, options); options = ConfigureCompression(options); scriptingImplementation = ConfigureScriptingImplementation(scriptingImplementation, buildTarget.Target); } if (!canBuildTarget) { EditorGUILayout.HelpBox( $"Your Unity Editor is missing build support for {buildTarget.Target.ToString()}.\n" + "Please add the missing build support options to your Unity Editor", buildTarget.Required ? MessageType.Error : MessageType.Warning); } if (check.changed) { RecordUndo("Worker build options"); env.BuildTargets[selectedTargetIndex] = new BuildTargetConfig(buildTarget.Target, options, enabled, required, deprecated: false, scriptingImplementation); selectedBuildTarget.Choices = null; } } }