public override void OnActivate(string searchContext, VisualElement rootElement) { m_BuilderConfigSettings = BuilderSettings.GetSerializedSettings(); /* */ m_configurations = m_BuilderConfigSettings.FindProperty("targets"); m_outpdirectory = m_BuilderConfigSettings.FindProperty("rootOutputDirectory"); m_verbose = m_BuilderConfigSettings.FindProperty("verbose"); /* Only create if the options variable found. */ if (m_configurations != null) { m_list = new ReorderableList(m_BuilderConfigSettings, m_configurations, true, true, false, false) { drawHeaderCallback = DrawListHeader, drawElementCallback = DrawListElement, elementHeightCallback = getElementHeight, }; } /* Autoselect the first if any build target exists. */ if (BuilderSettings.GetOrCreateSettings().targets.Length > 0) { this.selectedConfigIndex = 0; } }
public static void RunTarget(BuildTarget target) { /* */ BuilderSettings settings = BuilderSettings.GetOrCreateSettings(); System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = GetTargetLocationAbsolutePath(target); proc.Start(); }
public static SettingsProvider CreateBuildConfigurationSettingsProvider() { if (!IsSettingsAvailable()) { /* Create setting object if it does not exist. */ BuilderSettings.GetOrCreateSettings(); } SettingsProvider provider = new BuilderSettingsProvider("Project/MultiTarget Build Settings", SettingsScope.Project); provider.keywords = GetSearchKeywordsFromGUIContentProperties <Styles>(); return(provider); }
public static void PerformBuildScriptOnlyContext() { BuilderSettings config = BuilderSettings.GetOrCreateSettings(); BuildFromConfigScriptOnly(config); }
public static bool ValidatePerformBuildContext() { BuilderSettings setting = BuilderSettings.GetOrCreateSettings(); return(setting.targets.Length > 0 && Directory.Exists(setting.rootOutputDirectory)); }
internal static void InternalBuildTarget(BuildTarget buildTarget) { BuilderSettings settings = BuilderSettings.GetOrCreateSettings(); if (buildTarget.enabled) { /* Determine if supported on the target unity modules. */ if (!Builder.isBuildTargetSupported(buildTarget)) { Debug.LogError(string.Format("Build target {0} is not supported to be built with this Unity Version (Check if Modules are installed).", buildTarget.name)); /* Break from continue executing. */ return; } if (validateTargetPath(buildTarget)) { Debug.LogError(string.Format("Filepath: '{0}' is not valid.", GetTargetLocationAbsolutePath(buildTarget))); return; } /* Populate the build struct with the build target configuration. */ EditorBuildSettingsScene[] targetScenes = getDefaultScenes(); if (!buildTarget.useDefaultScenes) { /* Create scenes for building. */ targetScenes = new EditorBuildSettingsScene[buildTarget.scenes.Length]; for (int j = 0; j < targetScenes.Length; j++) { string path = AssetDatabase.GetAssetPath(buildTarget.scenes[j]); Debug.Log(path); targetScenes[j] = new EditorBuildSettingsScene(path, true); } } /* Pass argument to the building options. */ BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions(); buildPlayerOptions.locationPathName = GetTargetLocationAbsolutePath(buildTarget); buildPlayerOptions.scenes = new string[targetScenes.Length]; buildPlayerOptions.target = buildTarget.target; buildPlayerOptions.targetGroup = buildTarget.targetGroup; buildPlayerOptions.options = buildTarget.options; /* assign all scenes. */ int i = 0; foreach (EditorBuildSettingsScene scene in targetScenes) { buildPlayerOptions.scenes[i] = scene.path; i++; } BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions); BuildSummary summary = report.summary; /* Present verbose result. */ if (settings.verbose) { } Debug.LogFormat("", summary.totalTime.Seconds, summary.buildStartedAt, summary.buildEndedAt); switch (summary.result) { case BuildResult.Succeeded: Debug.Log("Build succeeded: " + summary.totalSize + " bytes"); break; case BuildResult.Failed: Debug.Log("Build failed"); break; case BuildResult.Cancelled: Debug.Log("Build Cancled"); break; default: case BuildResult.Unknown: Debug.Log("Build Unknown"); break; } Debug.Log("Platform: " + summary.platform.ToString()); Debug.LogFormat("", summary.options.ToString(), summary.platformGroup.ToString()); } }
public static string GetTargetLocationAbsolutePath(BuildTarget target) { BuilderSettings settings = BuilderSettings.GetOrCreateSettings(); string path = null; string root = settings.rootOutputDirectory; if (root.Length == 0) { /* Create default directory from user home directory. */ root = string.Format("{0}/{1}", Environment.GetFolderPath(Environment.SpecialFolder.Personal), PlayerSettings.productName); } /* Check if target path is rooted or relative. */ /* Compute the output filepath. */ if (target.outputDirectory.Length > 0) { path = Path.GetFullPath(string.Format("{0}/{1}/{2}", root, target.outputDirectory, target.Title)); } else { path = Path.GetFullPath(string.Format("{0}/{1}", root, target.Title)); } /* Add extension in order to make the target work properly in its environment. */ if (!Path.HasExtension(target.Title)) { switch (target.target) { case UnityEditor.BuildTarget.StandaloneWindows: case UnityEditor.BuildTarget.StandaloneWindows64: path = string.Format("{0}{1}", path, ".exe"); break; case UnityEditor.BuildTarget.StandaloneOSX: path = string.Format("{0}{1}", path, ".app"); break; case UnityEditor.BuildTarget.StandaloneLinux64: path = string.Format("{0}{1}", path, ".x86_64"); break; case UnityEditor.BuildTarget.Android: path = string.Format("{0}{1}", path, ".apk"); break; case UnityEditor.BuildTarget.iOS: path = string.Format("{0}{1}", path, ".ipa"); break; case UnityEditor.BuildTarget.WebGL: path = string.Format("{0}{1}", path, ".html"); break; case UnityEditor.BuildTarget.WSAPlayer: path = string.Format("{0}{1}", path, ".appx"); break; //TODO add support for other platforms. case UnityEditor.BuildTarget.PS4: case UnityEditor.BuildTarget.XboxOne: case UnityEditor.BuildTarget.tvOS: case UnityEditor.BuildTarget.Switch: default: break; } } /* Validate the path is an absolute path. */ if (Path.IsPathRooted(path)) { return(path); } else { throw new Exception("Could not construct valid global path."); } }
public static void GenerateConfig() { BuilderSettings.GetOrCreateSettings(); }
private void DisplayTargetView() { BuilderSettings settings = (BuilderSettings)m_BuilderConfigSettings.targetObject; if (m_configurations.arraySize == 0) { EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); GUILayout.BeginArea(new Rect(0, 0, Screen.width, Screen.height)); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label("Start Build Configuration by Creating a Target."); if (GUILayout.Button(Styles.addFirstTarget)) { /* Add default instance. */ int index = m_configurations.arraySize; m_configurations.InsertArrayElementAtIndex(index); m_BuilderConfigSettings.ApplyModifiedProperties(); /* Set the default value. */ settings.targets[index] = new BuildTarget(); settings.targets[index].title = PlayerSettings.productName; settings.targets[index].name = string.Format("Target {0}", index); m_BuilderConfigSettings.ApplyModifiedPropertiesWithoutUndo(); m_BuilderConfigSettings.Update(); if (m_configurations.arraySize == 1) { selectedConfigIndex = 0; } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.EndArea(); } else { /* */ EditorGUILayout.LabelField("Target Settings", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal("Box"); DisplayLeftBuildTargets(); //GUILayout.FlexibleSpace(); /* */ if (m_configurations.arraySize > 0) { EditorGUILayout.BeginVertical("GroupBox", GUILayout.MinHeight(600), GUILayout.MaxHeight(EditorGUI.GetPropertyHeight(m_configurations, true))); //TODO add height from property. EditorGUILayout.LabelField(""); /* Displace the build target if selected and is a valid index. */ if (m_configurations.arraySize > 0) { if (selectedConfigIndex >= 0 && selectedConfigIndex < m_configurations.arraySize) { /* Draw main build target property. */ EditorGUILayout.PropertyField(m_configurations.GetArrayElementAtIndex(selectedConfigIndex), GUIContent.none, true); using (new EditorGUI.IndentLevelScope(3)) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.Space(); EditorGUI.BeginDisabledGroup(settings.targets[selectedConfigIndex].useDefaultScenes); if (GUILayout.Button(Styles.SetDefaultScenes, GUILayout.MaxWidth(120))) { SerializedProperty scenes = m_BuilderConfigSettings.FindProperty("scenes"); EditorBuildSettingsScene[] defScenes = Builder.getDefaultScenes(); settings.targets[selectedConfigIndex].scenes = new SceneAsset[defScenes.Length]; for (int i = 0; i < defScenes.Length; i++) { settings.targets[selectedConfigIndex].scenes[i] = AssetDatabase.LoadAssetAtPath <SceneAsset>(defScenes[i].path); } } if (GUILayout.Button(Styles.ClearScenes, GUILayout.MaxWidth(120))) { SerializedProperty scenes = m_configurations.GetArrayElementAtIndex(selectedConfigIndex).FindPropertyRelative("scenes"); scenes.ClearArray(); // } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); /* Draw build buttons. */ BuildTarget optionItem = BuilderSettings.GetOrCreateSettings().targets[selectedConfigIndex]; bool isTargetSupported = Builder.isBuildTargetSupported(optionItem); if (!isTargetSupported) { EditorGUILayout.LabelField("Target Group and Target is not valid configuration", this.errorStyle); } EditorGUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(!isTargetSupported); if (GUILayout.Button(Styles.build, GUILayout.MaxWidth(120))) { Builder.BuildTarget(optionItem); } if (GUILayout.Button(Styles.buildScript, GUILayout.MaxWidth(120))) { Builder.BuildTargetScriptOnly(optionItem); } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); try { string outputPathLabel = string.Format("Executable filepath: {0}", Builder.GetTargetLocationAbsolutePath(optionItem), EditorStyles.boldLabel); EditorGUILayout.LabelField(outputPathLabel); } catch (Exception ex) { Color currentColor = EditorStyles.label.normal.textColor; EditorStyles.label.normal.textColor = Color.red; EditorGUILayout.LabelField(string.Format("Invalid setttings: {0}.", ex.Message)); EditorStyles.label.normal.textColor = currentColor; } } } } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); } }