Пример #1
0
        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;
            }
        }
Пример #2
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();
        }
Пример #3
0
        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);
        }
Пример #4
0
        public static void PerformBuildScriptOnlyContext()
        {
            BuilderSettings config = BuilderSettings.GetOrCreateSettings();

            BuildFromConfigScriptOnly(config);
        }
Пример #5
0
        public static bool ValidatePerformBuildContext()
        {
            BuilderSettings setting = BuilderSettings.GetOrCreateSettings();

            return(setting.targets.Length > 0 && Directory.Exists(setting.rootOutputDirectory));
        }
Пример #6
0
        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());
            }
        }
Пример #7
0
        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.");
            }
        }
Пример #8
0
 public static void GenerateConfig()
 {
     BuilderSettings.GetOrCreateSettings();
 }
Пример #9
0
        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();
            }
        }