Ejemplo n.º 1
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, GUIContent.none, property);

            EditorGUILayout.BeginHorizontal();

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader("Basic Settings", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#basic-settings");
            EditorGUILayout.EndHorizontal();

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                GUILayout.Label("Build Path Options", UnityBuildGUIUtility.midHeaderStyle);

                EditorGUILayout.PropertyField(property.FindPropertyRelative("baseBuildFolder"));
                EditorGUILayout.PropertyField(property.FindPropertyRelative("buildPath"));

                GUILayout.Space(20);
                GUILayout.Label("Post-Build Options", UnityBuildGUIUtility.midHeaderStyle);

                SerializedProperty openBuildFolderAfterBuild = property.FindPropertyRelative("openFolderPostBuild");
                openBuildFolderAfterBuild.boolValue = EditorGUILayout.ToggleLeft(" Open output folder after build", openBuildFolderAfterBuild.boolValue);

                string buildPath = Path.GetFullPath(Path.Combine(BuildSettings.basicSettings.baseBuildFolder, BuildSettings.basicSettings.buildPath));
                if (!string.Equals(buildPath, lastBuildPath))
                {
                    lastBuildPath = buildPath;

                    if (buildPath.Contains(Path.GetFullPath(Application.dataPath)))
                    {
                        BuildNotificationList.instance.AddNotification(new BuildNotification(
                                                                           BuildNotification.Category.Warning,
                                                                           "Build Folder in Assets.",
                                                                           "Putting build output in Assets is generally a bad idea.",
                                                                           true, null));
                    }
                }

                if (GUILayout.Button("Open Build Folder", GUILayout.ExpandWidth(true)))
                {
                    string path = BuildSettings.basicSettings.baseBuildFolder;
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }

                    System.Diagnostics.Process.Start(path);
                }

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
Ejemplo n.º 2
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, GUIContent.none, property);

            EditorGUILayout.BeginHorizontal();

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader("Product Parameters", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#product-parameters");
            EditorGUILayout.EndHorizontal();

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                SerializedProperty autoGenerate           = property.FindPropertyRelative("autoGenerate");
                SerializedProperty syncWithPlayerSettings = property.FindPropertyRelative("syncWithPlayerSettings");

                EditorGUI.BeginDisabledGroup(syncWithPlayerSettings.boolValue);
                EditorGUILayout.PropertyField(property.FindPropertyRelative("version"));

                EditorGUI.BeginDisabledGroup(true);
                EditorGUILayout.PropertyField(property.FindPropertyRelative("lastGeneratedVersion"));
                EditorGUI.EndDisabledGroup();

                autoGenerate.boolValue = EditorGUILayout.ToggleLeft("Auto-Generate Version", autoGenerate.boolValue);
                EditorGUI.EndDisabledGroup();

                EditorGUI.BeginDisabledGroup(autoGenerate.boolValue);
                syncWithPlayerSettings.boolValue = EditorGUILayout.ToggleLeft("Sync Version with Player Settings", syncWithPlayerSettings.boolValue);
                EditorGUI.EndDisabledGroup();
                if (syncWithPlayerSettings.boolValue)
                {
                    property.FindPropertyRelative("version").stringValue = PlayerSettings.bundleVersion;
                }

                EditorGUILayout.PropertyField(property.FindPropertyRelative("buildCounter"));

                if (GUILayout.Button("Reset Build Counter", GUILayout.ExpandWidth(true)))
                {
                    property.FindPropertyRelative("buildCounter").intValue = 0;
                    // Debug.Log(EditorUserBuildSettings.xboxBuildSubtarget);
                }

                if (!autoGenerate.boolValue && GUILayout.Button("Generate Version String Now", GUILayout.ExpandWidth(true)))
                {
                    BuildProject.GenerateVersionString(BuildSettings.productParameters, DateTime.Now);
                }

                property.serializedObject.ApplyModifiedProperties();

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader("Release Types", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#release-types");
            EditorGUILayout.EndHorizontal();

            list = property.FindPropertyRelative("releaseTypes");

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                for (int i = 0; i < list.arraySize; i++)
                {
                    SerializedProperty typeProperty = list.GetArrayElementAtIndex(i);
                    EditorGUILayout.PropertyField(typeProperty, GUILayout.MaxHeight(0));
                }

                GUILayout.Space(20);
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Add Release Type", GUILayout.ExpandWidth(false), GUILayout.MaxWidth(150)))
                {
                    // Add new entry.
                    int addedIndex = list.arraySize;
                    list.InsertArrayElementAtIndex(addedIndex);

                    // Set default values.
                    SerializedProperty addedEntry = list.GetArrayElementAtIndex(addedIndex);
                    addedEntry.FindPropertyRelative("typeName").stringValue    = "NewReleaseType";
                    addedEntry.FindPropertyRelative("productName").stringValue = Application.productName;

                    list.serializedObject.ApplyModifiedProperties();

                    BuildSettings.releaseTypeList.releaseTypes[BuildSettings.releaseTypeList.releaseTypes.Length - 1].sceneList = new SceneList();

                    GUIUtility.keyboardControl = 0;
                }
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();
            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader(label.text, ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#prepost-build-actions");
            EditorGUILayout.EndHorizontal();

            list = property.FindPropertyRelative("buildActions");

            List <Type> actionTypes;

            if (property.name.ToUpper().Contains("PRE"))
            {
                actionTypes = BuildActionListUtility.preBuildActions;
            }
            else
            {
                actionTypes = BuildActionListUtility.postBuildActions;
            }

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                DrawActions(property);

                if (list.arraySize > 0)
                {
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                }

                DrawActionList(property, actionTypes);

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
Ejemplo n.º 5
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            showViewOptions  = property.FindPropertyRelative("showViewOptions");
            showConfigs      = property.FindPropertyRelative("showConfigs");
            showBuildInfo    = property.FindPropertyRelative("showBuildInfo");
            hideDisabled     = property.FindPropertyRelative("hideDisabled");
            treeView         = property.FindPropertyRelative("treeView");
            selectedKeyChain = property.FindPropertyRelative("selectedKeyChain");

            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();

            show = property.isExpanded;
            UnityBuildGUIUtility.DropdownHeader("Build Configurations", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#build-configurations");
            EditorGUILayout.EndHorizontal();

            Color defaultBackgroundColor = GUI.backgroundColor;

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                EditorGUILayout.BeginHorizontal();
                show = showViewOptions.isExpanded;
                UnityBuildGUIUtility.DropdownHeader("View Options", ref show, false, GUILayout.ExpandWidth(true));
                showViewOptions.isExpanded = show;
                EditorGUILayout.EndHorizontal();

                if (show)
                {
                    EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                    hideDisabled.boolValue = EditorGUILayout.ToggleLeft("Hide disabled configurations", hideDisabled.boolValue);
                    treeView.boolValue     = EditorGUILayout.ToggleLeft("Show full configurations tree", treeView.boolValue);

                    EditorGUILayout.EndVertical();
                }

                GUILayout.Space(5);
                EditorGUILayout.BeginHorizontal();
                show = showConfigs.isExpanded;
                UnityBuildGUIUtility.DropdownHeader("Configurations", ref show, false, GUILayout.ExpandWidth(true));
                showConfigs.isExpanded = show;
                EditorGUILayout.EndHorizontal();

                if (show)
                {
                    EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                    if (BuildSettings.projectConfigurations.configSet.Keys.Count > 0)
                    {
                        BuildReleaseType[] releaseTypes = BuildSettings.releaseTypeList.releaseTypes;
                        for (int i = 0; i < releaseTypes.Length; i++)
                        {
                            string        key    = releaseTypes[i].typeName;
                            Configuration config = BuildSettings.projectConfigurations.configSet[key];
                            DisplayConfigTree(key, config, 0);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("No Configuration info. Please add a Release Type.", MessageType.Error);
                    }


                    EditorGUILayout.EndVertical();
                }

                GUILayout.Space(5);
                EditorGUILayout.BeginHorizontal();
                show = showBuildInfo.isExpanded;
                UnityBuildGUIUtility.DropdownHeader("Build Info", ref show, false, GUILayout.ExpandWidth(true));
                showBuildInfo.isExpanded = show;
                EditorGUILayout.EndHorizontal();

                if (show)
                {
                    EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                    if (string.IsNullOrEmpty(selectedKeyChain.stringValue))
                    {
                        EditorGUILayout.HelpBox("Click a build configuration above in \"Configurations\" to view full details.", MessageType.Info);
                    }
                    else
                    {
                        BuildReleaseType  releaseType;
                        BuildPlatform     platform;
                        BuildArchitecture arch;
                        BuildDistribution dist;

                        bool parseSuccess = BuildSettings.projectConfigurations.ParseKeychain(selectedKeyChain.stringValue, out releaseType, out platform, out arch, out dist);

                        if (parseSuccess)
                        {
                            string defines = BuildProject.GenerateDefaultDefines(releaseType, platform, arch, dist);

                            EditorGUILayout.LabelField("Misc Info", UnityBuildGUIUtility.midHeaderStyle);
                            EditorGUILayout.LabelField("Defines:");
                            EditorGUILayout.LabelField(defines, EditorStyles.wordWrappedLabel);

                            if (releaseType != null)
                            {
                                EditorGUILayout.LabelField("Release Type", UnityBuildGUIUtility.midHeaderStyle);
                                EditorGUILayout.LabelField("Type Name:\t" + releaseType.typeName);

                                if (!string.IsNullOrEmpty(releaseType.bundleIndentifier))
                                {
                                    EditorGUILayout.LabelField("Bundle Identifier:\t" + releaseType.bundleIndentifier);
                                }

                                EditorGUILayout.LabelField("Product Name:\t" + releaseType.productName);
                            }

                            if (platform != null)
                            {
                                EditorGUILayout.LabelField("Platform", UnityBuildGUIUtility.midHeaderStyle);
                                EditorGUILayout.LabelField("Name:\t\t" + platform.platformName);
                            }

                            if (arch != null)
                            {
                                EditorGUILayout.LabelField("Architecture", UnityBuildGUIUtility.midHeaderStyle);
                                EditorGUILayout.LabelField("Name:\t\t" + arch.name);
                            }

                            if (dist != null)
                            {
                                EditorGUILayout.LabelField("Distribution", UnityBuildGUIUtility.midHeaderStyle);
                                EditorGUILayout.LabelField("Name:\t\t" + dist.distributionName);
                            }

                            GUILayout.Space(20);
                            GUI.backgroundColor = Color.green;
                            if (GUILayout.Button("Build", GUILayout.ExpandWidth(true)))
                            {
                                EditorApplication.delayCall += () =>
                                                               BuildProject.BuildSingle(selectedKeyChain.stringValue);
                            }
                            if (GUILayout.Button("Build and Run", GUILayout.ExpandWidth(true)))
                            {
                                EditorApplication.delayCall += () =>
                                                               BuildProject.BuildSingle(selectedKeyChain.stringValue, BuildOptions.AutoRunPlayer);
                            }

                            EditorGUI.BeginDisabledGroup(!releaseType.developmentBuild);
                            if (GUILayout.Button("Build and Run w/ Profiler", GUILayout.ExpandWidth(true)))
                            {
                                EditorApplication.delayCall += () =>
                                                               BuildProject.BuildSingle(selectedKeyChain.stringValue, BuildOptions.AutoRunPlayer | BuildOptions.ConnectWithProfiler);
                            }
                            EditorGUI.EndDisabledGroup();
                            GUI.backgroundColor = defaultBackgroundColor;

                            if (GUILayout.Button("Refresh BuildConstants and Apply Defines", GUILayout.ExpandWidth(true)))
                            {
                            #if UNITY_5_6_OR_NEWER
                                EditorUserBuildSettings.SwitchActiveBuildTarget(platform.targetGroup, arch.target);
                            #else
                                EditorUserBuildSettings.SwitchActiveBuildTarget(arch.target);
                            #endif
                                PlayerSettings.SetScriptingDefineSymbolsForGroup(platform.targetGroup, defines);
                                BuildConstantsGenerator.Generate(DateTime.Now, BuildSettings.productParameters.lastGeneratedVersion, releaseType, platform, arch, dist);
                            }
                        }
                        else
                        {
                            EditorGUILayout.HelpBox("Could not parse selected configuration. It may no longer be valid due to a changes. Select again.", MessageType.Info);
                        }
                    }

                    EditorGUILayout.EndVertical();
                }

                property.serializedObject.ApplyModifiedProperties();

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            // Limit valid characters.
            // TODO: This might not be necessary since name will need to be sanitized for different needs later (as an enum entry, pre-processor define, etc.)
            //char chr = Event.current.character;
            //if ((chr < 'a' || chr > 'z') && (chr < 'A' || chr > 'Z') && (chr < '0' || chr > '9') && chr != '-' && chr != '_' && chr != ' ')
            //{
            //    Event.current.character = '\0';
            //}

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader(property.FindPropertyRelative("typeName").stringValue, ref show, false);
            property.isExpanded = show;

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                GUILayout.Label("Basic Info", UnityBuildGUIUtility.midHeaderStyle);

                SerializedProperty typeName = property.FindPropertyRelative("typeName");

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Type Name");
                typeName.stringValue = BuildProject.SanitizeFolderName(GUILayout.TextArea(typeName.stringValue));
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.PropertyField(property.FindPropertyRelative("bundleIndentifier"));
                EditorGUILayout.PropertyField(property.FindPropertyRelative("productName"));
                EditorGUILayout.PropertyField(property.FindPropertyRelative("companyName"));

                GUILayout.Space(20);
                GUILayout.Label("Build Options", UnityBuildGUIUtility.midHeaderStyle);

                EditorGUILayout.PropertyField(property.FindPropertyRelative("customDefines"));

                SerializedProperty developmentBuild   = property.FindPropertyRelative("developmentBuild");
                SerializedProperty allowDebugging     = property.FindPropertyRelative("allowDebugging");
                SerializedProperty enableHeadlessMode = property.FindPropertyRelative("enableHeadlessMode");

                EditorGUI.BeginDisabledGroup(enableHeadlessMode.boolValue);
                developmentBuild.boolValue = EditorGUILayout.ToggleLeft(" Development Build", developmentBuild.boolValue);
                EditorGUI.EndDisabledGroup();

                EditorGUI.BeginDisabledGroup(!developmentBuild.boolValue);
                allowDebugging.boolValue = EditorGUILayout.ToggleLeft(" Script Debugging", allowDebugging.boolValue);
                EditorGUI.EndDisabledGroup();

                EditorGUI.BeginDisabledGroup(developmentBuild.boolValue);
                enableHeadlessMode.boolValue = EditorGUILayout.ToggleLeft(" Headless Mode", enableHeadlessMode.boolValue);
                EditorGUI.EndDisabledGroup();

                EditorGUILayout.PropertyField(property.FindPropertyRelative("sceneList"));

                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Delete", GUILayout.MaxWidth(150)))
                {
                    BuildReleaseType[] types = BuildSettings.releaseTypeList.releaseTypes;
                    for (int i = 0; i < types.Length; i++)
                    {
                        if (types[i].typeName == property.FindPropertyRelative("typeName").stringValue)
                        {
                            ArrayUtility.RemoveAt <BuildReleaseType>(ref BuildSettings.releaseTypeList.releaseTypes, i);
                            GUIUtility.keyboardControl = 0;
                            break;
                        }
                    }
                }
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();

                property.serializedObject.ApplyModifiedProperties();

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
Ejemplo n.º 7
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader("SceneList", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            EditorGUILayout.EndHorizontal();

            //Refresh all scene lists.
            for (int i = 0; i < BuildSettings.releaseTypeList.releaseTypes.Length; i++)
            {
                BuildReleaseType rt = BuildSettings.releaseTypeList.releaseTypes[i];
                rt.sceneList.Refresh();
            }

            list = property.FindPropertyRelative("enabledScenes");
            PopulateSceneList();

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                for (int i = 0; i < list.arraySize; i++)
                {
                    SerializedProperty platformProperty = list.GetArrayElementAtIndex(i);

                    string filePath  = platformProperty.FindPropertyRelative("filePath").stringValue;
                    string sceneName = Path.GetFileNameWithoutExtension(filePath);

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.TextArea(sceneName + " (" + filePath + ")");

                    EditorGUI.BeginDisabledGroup(i == 0);
                    if (GUILayout.Button("↑↑", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, 0);
                    }
                    if (GUILayout.Button("↑", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, i - 1);
                    }
                    EditorGUI.EndDisabledGroup();

                    EditorGUI.BeginDisabledGroup(i == list.arraySize - 1);
                    if (GUILayout.Button("↓", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, i + 1);
                    }
                    EditorGUI.EndDisabledGroup();

                    if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.DeleteArrayElementAtIndex(i);
                    }

                    property.serializedObject.ApplyModifiedProperties();

                    PopulateSceneList();

                    EditorGUILayout.EndHorizontal();
                }

                if (list.arraySize > 0)
                {
                    GUILayout.Space(20);
                }

                if (availableScenesList.Count > 0)
                {
                    GUILayout.BeginHorizontal();

                    string[] sceneStringList = new string[availableScenesList.Count];
                    for (int i = 0; i < sceneStringList.Length; i++)
                    {
                        sceneStringList[i] = Path.GetFileNameWithoutExtension(availableScenesList[i].filePath) + " (" + availableScenesList[i].filePath.Replace("/", "\\") + ")";
                    }

                    index = EditorGUILayout.Popup(index, sceneStringList, UnityBuildGUIUtility.popupStyle, GUILayout.ExpandWidth(true));
                    if (GUILayout.Button("Add Scene", GUILayout.ExpandWidth(false), GUILayout.MaxWidth(150)) && index < availableScenesList.Count)
                    {
                        int             addedIndex = list.arraySize;
                        SceneList.Scene scene      = availableScenesList[index];
                        list.InsertArrayElementAtIndex(addedIndex);
                        list.GetArrayElementAtIndex(addedIndex).FindPropertyRelative("filePath").stringValue = scene.filePath;

                        availableScenesList.RemoveAt(index);

                        index = 0;
                    }

                    GUILayout.EndHorizontal();
                }

                list.serializedObject.ApplyModifiedProperties();
                property.serializedObject.ApplyModifiedProperties();

                if (GUILayout.Button("Refresh Scene List", GUILayout.ExpandWidth(true)))
                {
                    PopulateSceneList();
                }

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
Ejemplo n.º 8
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader("Build Platforms", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#build-platforms");
            EditorGUILayout.EndHorizontal();

            //if (list == null)
            //{
            platformList = fieldInfo.GetValue(property.serializedObject.targetObject) as BuildPlatformList;
            PopulateList();
            list = property.FindPropertyRelative("platforms");
            //}

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                int enabledCount = 0;
                for (int i = 0; i < list.arraySize; i++)
                {
                    SerializedProperty platformProperty = list.GetArrayElementAtIndex(i);
                    SerializedProperty platformEnabled  = platformProperty.FindPropertyRelative("enabled");

                    string platformName = platformList.platforms[i].platformName;

                    if (platformEnabled.boolValue)
                    {
                        ++enabledCount;
                        EditorGUILayout.PropertyField(platformProperty, GUILayout.MaxHeight(0));
                        if (availablePlatformList.Contains(platformName))
                        {
                            availablePlatformList.Remove(platformName);
                        }
                    }
                    else if (!availablePlatformList.Contains(platformName))
                    {
                        availablePlatformList.Add(platformName);
                    }
                }

                if (availablePlatformList.Count > 0)
                {
                    if (enabledCount > 0)
                    {
                        GUILayout.Space(20);
                    }

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    index = EditorGUILayout.Popup(index, availablePlatformList.ToArray(), UnityBuildGUIUtility.popupStyle, GUILayout.ExpandWidth(false), GUILayout.MaxWidth(250));
                    if (GUILayout.Button("Add Platform", GUILayout.ExpandWidth(false), GUILayout.MaxWidth(150)))
                    {
                        for (int i = 0; i < list.arraySize; i++)
                        {
                            SerializedProperty platformProperty = list.GetArrayElementAtIndex(i);
                            string             platformName     = platformList.platforms[i].platformName;

                            if (availablePlatformList[index] == platformName)
                            {
                                SerializedProperty platformEnabled = platformProperty.FindPropertyRelative("enabled");
                                platformEnabled.boolValue = true;

                                platformProperty.serializedObject.ApplyModifiedProperties();
                            }
                        }

                        index = 0;
                    }
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();
                }

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
Ejemplo n.º 9
0
        private void DrawWarnings()
        {
            int warningCount   = 0;
            int clearableCount = 0;

            for (int i = 0; i < BuildNotificationList.instance.warnings.Count; i++)
            {
                BuildNotification notification = BuildNotificationList.instance.warnings[i];

                if (notification.valid == null || notification.valid())
                {
                    ++warningCount;
                }
                if (notification.clearable)
                {
                    ++clearableCount;
                }
            }

            if (warningCount == 0)
            {
                return;
            }

            Color defaultBackgroundColor = GUI.backgroundColor;

            EditorGUILayout.BeginHorizontal();
            GUI.backgroundColor = Color.yellow;
            UnityBuildGUIUtility.DropdownHeader(
                "Warnings (" + warningCount + ")",
                ref show, true,
                GUILayout.ExpandWidth(true));

            if (clearableCount > 0)
            {
                if (GUILayout.Button(clearButtonContent, UnityBuildGUIUtility.helpButtonStyle))
                {
                    BuildNotificationList.instance.RefreshWarnings();
                }
            }

            GUI.backgroundColor = defaultBackgroundColor;
            EditorGUILayout.EndHorizontal();

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                for (int i = 0; i < BuildNotificationList.instance.warnings.Count; i++)
                {
                    BuildNotification notification = BuildNotificationList.instance.warnings[i];

                    if (notification.valid == null || notification.valid())
                    {
                        EditorGUILayout.HelpBox(notification.title + "\n" + notification.details, MessageType.Warning);
                    }
                }

                EditorGUILayout.EndVertical();
            }
        }
Ejemplo n.º 10
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();
            property.serializedObject.Update();

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader("Build Platforms", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#build-platforms");
            EditorGUILayout.EndHorizontal();

            //if (list == null)
            //{
            platformList = fieldInfo.GetValue(property.serializedObject.targetObject) as BuildPlatformList;
            PopulateList();
            list = property.FindPropertyRelative("platforms");
            list.serializedObject.Update();
            //}

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                // Draw all created/enabled platforms.
                int enabledCount = 0;
                for (int i = 0; i < list.arraySize; i++)
                {
                    SerializedProperty platformProperty = list.GetArrayElementAtIndex(i);
                    SerializedProperty platformEnabled  = platformProperty.FindPropertyRelative("enabled");

                    if (platformEnabled.boolValue)
                    {
                        ++enabledCount;
                        EditorGUILayout.PropertyField(platformProperty, GUILayout.MaxHeight(0));
                    }
                }

                if (enabledCount > 0)
                {
                    GUILayout.Space(20);
                }

                // Draw all available platforms.
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                index = EditorGUILayout.Popup(index, availablePlatformNameList.ToArray(), UnityBuildGUIUtility.popupStyle, GUILayout.ExpandWidth(false), GUILayout.MaxWidth(250));
                if (GUILayout.Button("Add Platform", GUILayout.ExpandWidth(false), GUILayout.MaxWidth(150)))
                {
                    platformList.platforms.Add((BuildPlatform)Activator.CreateInstance(availablePlatformTypeList[index]));
                    platformList.platforms[platformList.platforms.Count - 1].enabled = true;

                    for (int i = platformList.platforms.Count - 1; i >= 0; i--)
                    {
                        if (!platformList.platforms[i].enabled)
                        {
                            platformList.platforms.RemoveAt(i);
                        }
                    }
                }
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
Ejemplo n.º 11
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);


            list = property.FindPropertyRelative("clauses");

            // If no clauses present, only display a button to add one.
            if (list.arraySize == 0)
            {
                if (GUILayout.Button("Add Filter", GUILayout.ExpandWidth(true)))
                {
                    AddClause();
                    property.isExpanded = true;
                }

                return;
            }

            EditorGUILayout.BeginHorizontal();
            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader("Filter", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;
            EditorGUILayout.EndHorizontal();

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                EditorGUILayout.BeginHorizontal();
                SerializedProperty condition = property.FindPropertyRelative("condition");

                EditorGUILayout.LabelField("Run this BuildAction if", GUILayout.Width(130));
                BuildFilter.FilterCondition modifiedCondition = (BuildFilter.FilterCondition)EditorGUILayout.EnumPopup((BuildFilter.FilterCondition)condition.enumValueIndex, GUILayout.Width(95));
                condition.enumValueIndex = (int)modifiedCondition;
                EditorGUILayout.LabelField("of these conditions is/are true.", GUILayout.ExpandWidth(false));

                EditorGUILayout.EndHorizontal();

                GUILayout.Space(20);

                for (int i = 0; i < list.arraySize; i++)
                {
                    EditorGUILayout.BeginHorizontal();

                    SerializedProperty listEntry      = list.GetArrayElementAtIndex(i);
                    SerializedProperty testType       = listEntry.FindPropertyRelative("type");
                    SerializedProperty testComparison = listEntry.FindPropertyRelative("comparison");
                    SerializedProperty testValue      = listEntry.FindPropertyRelative("test");

                    BuildFilter.FilterType       modifiedType       = (BuildFilter.FilterType)EditorGUILayout.EnumPopup((BuildFilter.FilterType)testType.enumValueIndex, GUILayout.ExpandWidth(false), GUILayout.Width(140));
                    BuildFilter.FilterComparison modifiedComparison = (BuildFilter.FilterComparison)EditorGUILayout.EnumPopup((BuildFilter.FilterComparison)testComparison.enumValueIndex, GUILayout.ExpandWidth(false), GUILayout.Width(100));
                    testType.enumValueIndex       = (int)modifiedType;
                    testComparison.enumValueIndex = (int)modifiedComparison;

                    testValue.stringValue = GUILayout.TextField(testValue.stringValue);

                    if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.DeleteArrayElementAtIndex(i);
                        list.serializedObject.ApplyModifiedProperties();
                    }

                    EditorGUILayout.EndHorizontal();
                }

                if (GUILayout.Button("Add Condition", GUILayout.ExpandWidth(true)))
                {
                    AddClause();
                }

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
Ejemplo n.º 12
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, GUIContent.none, property);

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader(property.FindPropertyRelative("platformName").stringValue, ref show, false);
            property.isExpanded = show;

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                SerializedProperty archList = property.FindPropertyRelative("architectures");

                if (archList.arraySize > 1)
                {
                    GUILayout.Label("Architectures", UnityBuildGUIUtility.midHeaderStyle);
                    for (int i = 0; i < archList.arraySize; i++)
                    {
                        SerializedProperty archProperty   = archList.GetArrayElementAtIndex(i);
                        SerializedProperty archName       = archProperty.FindPropertyRelative("name");
                        SerializedProperty archEnabled    = archProperty.FindPropertyRelative("enabled");
                        SerializedProperty archDeprecated = archProperty.FindPropertyRelative("deprecated");

                        archEnabled.boolValue = GUILayout.Toggle(archEnabled.boolValue, archName.stringValue);
                        if (archEnabled.boolValue && archDeprecated.boolValue)
                        {
                            EditorGUILayout.HelpBox("This architecture has been deprecated and will be removed in a future Unity version.", MessageType.Warning);
                        }

                        archProperty.serializedObject.ApplyModifiedProperties();
                    }
                }

                SerializedProperty variantList = property.FindPropertyRelative("variants");

                if (variantList.arraySize > 0)
                {
                    GUILayout.Label("Variant Options", UnityBuildGUIUtility.midHeaderStyle);

                    for (int i = 0; i < variantList.arraySize; i++)
                    {
                        SerializedProperty variantProperty      = variantList.GetArrayElementAtIndex(i);
                        SerializedProperty variantName          = variantProperty.FindPropertyRelative("variantName");
                        SerializedProperty variantValues        = variantProperty.FindPropertyRelative("values");
                        SerializedProperty selectedVariantIndex = variantProperty.FindPropertyRelative("selectedIndex");

                        List <string> valueNames = new List <string>(variantValues.arraySize);
                        for (int j = 0; j < variantValues.arraySize; j++)
                        {
                            valueNames.Add(variantValues.GetArrayElementAtIndex(j).stringValue);
                        }

                        GUILayout.BeginHorizontal();

                        EditorGUILayout.LabelField(variantName.stringValue);
                        selectedVariantIndex.intValue =
                            EditorGUILayout.Popup(selectedVariantIndex.intValue, valueNames.ToArray(), UnityBuildGUIUtility.popupStyle, GUILayout.ExpandWidth(false), GUILayout.MaxWidth(250));

                        GUILayout.EndHorizontal();
                    }
                }

                SerializedProperty distList = property.FindPropertyRelative("distributionList.distributions");

                if (distList.arraySize > 0)
                {
                    GUILayout.Label("Distributions", UnityBuildGUIUtility.midHeaderStyle);

                    for (int i = 0; i < distList.arraySize; i++)
                    {
                        SerializedProperty dist        = distList.GetArrayElementAtIndex(i);
                        SerializedProperty distEnabled = dist.FindPropertyRelative("enabled");
                        SerializedProperty distName    = dist.FindPropertyRelative("distributionName");

                        GUILayout.BeginHorizontal();

                        distEnabled.boolValue = GUILayout.Toggle(distEnabled.boolValue, GUIContent.none, GUILayout.ExpandWidth(false));
                        distName.stringValue  = BuildProject.SanitizeFolderName(GUILayout.TextField(distName.stringValue));

                        if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                        {
                            distList.DeleteArrayElementAtIndex(i);
                        }

                        dist.serializedObject.ApplyModifiedProperties();

                        GUILayout.EndHorizontal();
                    }
                }

                GUILayout.Space(10);
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                GUILayout.BeginVertical();
                if (GUILayout.Button("Add Distribution", GUILayout.MaxWidth(150)))
                {
                    int addedIndex = distList.arraySize;
                    distList.InsertArrayElementAtIndex(addedIndex);

                    SerializedProperty addedProperty = distList.GetArrayElementAtIndex(addedIndex);
                    addedProperty.FindPropertyRelative("enabled").boolValue            = true;
                    addedProperty.FindPropertyRelative("distributionName").stringValue = "DistributionName";

                    addedProperty.serializedObject.ApplyModifiedProperties();
                    distList.serializedObject.ApplyModifiedProperties();
                    property.serializedObject.ApplyModifiedProperties();
                    GUIUtility.keyboardControl = 0;
                }
                if (GUILayout.Button("Delete Platform", GUILayout.MaxWidth(150)))
                {
                    property.FindPropertyRelative("enabled").boolValue = false;
                }
                GUILayout.EndVertical();
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();

                EditorGUILayout.EndVertical();
            }

            property.serializedObject.ApplyModifiedProperties();

            EditorGUI.EndProperty();
        }
Ejemplo n.º 13
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();
            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader(label.text, ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            UnityBuildGUIUtility.HelpButton("Parameter-Details#build-actions");
            EditorGUILayout.EndHorizontal();

            list = property.FindPropertyRelative("buildActions");

            List <Type> actionTypes;

            if (property.name.ToUpper().Contains("PRE"))
            {
                actionTypes = BuildActionListUtility.preBuildActions;
            }
            else
            {
                actionTypes = BuildActionListUtility.postBuildActions;
            }

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                for (int i = 0; i < list.arraySize; i++)
                {
                    SerializedProperty listEntry = list.GetArrayElementAtIndex(i);

                    BuildAction buildAction = listEntry.objectReferenceValue as BuildAction;
                    if (buildAction == null)
                    {
                        list.DeleteArrayElementAtIndex(i);
                        --i;
                        continue;
                    }

                    SerializedObject serializedBuildAction = new SerializedObject(buildAction);

                    EditorGUILayout.BeginHorizontal();
                    show = listEntry.isExpanded;

                    buildAction.actionEnabled = EditorGUILayout.Toggle(buildAction.actionEnabled, GUILayout.Width(15));
                    EditorGUI.BeginDisabledGroup(!buildAction.actionEnabled);
                    UnityBuildGUIUtility.DropdownHeader(buildAction.actionName, ref show, false, GUILayout.ExpandWidth(true));
                    EditorGUI.EndDisabledGroup();
                    listEntry.isExpanded = show;

                    EditorGUI.BeginDisabledGroup(i == 0);
                    if (GUILayout.Button("↑↑", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, 0);
                    }
                    if (GUILayout.Button("↑", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, i - 1);
                    }
                    EditorGUI.EndDisabledGroup();

                    EditorGUI.BeginDisabledGroup(i == list.arraySize - 1);
                    if (GUILayout.Button("↓", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        list.MoveArrayElement(i, i + 1);
                    }
                    EditorGUI.EndDisabledGroup();

                    if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                    {
                        BuildAction[] buildActions;
                        if (property.name.ToUpper().Contains("PRE"))
                        {
                            buildActions = BuildSettings.preBuildActions.buildActions;
                        }
                        else
                        {
                            buildActions = BuildSettings.postBuildActions.buildActions;
                        }

                        // Destroy underlying object.
                        ScriptableObject.DestroyImmediate(buildActions[i], true);
                        AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance));

                        // Remove object reference from list.
                        // TODO: Why do I need to call this twice? First call nulls reference, second one then deletes null entry.
                        list.DeleteArrayElementAtIndex(i);
                        list.DeleteArrayElementAtIndex(i);
                        show = false;
                    }

                    EditorGUILayout.EndHorizontal();

                    if (show && buildAction.actionEnabled)
                    {
                        EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);
                        buildAction.Draw(serializedBuildAction);
                        EditorGUILayout.EndVertical();
                    }
                }

                if (list.arraySize > 0)
                {
                    GUILayout.Space(20);
                }

                if (actionTypes.Count > 0)
                {
                    GUILayout.BeginHorizontal();

                    string[] buildActionNameList = new string[actionTypes.Count];
                    for (int i = 0; i < buildActionNameList.Length; i++)
                    {
                        buildActionNameList[i] = actionTypes[i].Name;
                    }

                    index = EditorGUILayout.Popup(index, buildActionNameList, UnityBuildGUIUtility.popupStyle, GUILayout.ExpandWidth(true));
                    if (GUILayout.Button("Add Build Action", GUILayout.ExpandWidth(false), GUILayout.MaxWidth(150)) && index < actionTypes.Count)
                    {
                        Type addedType = actionTypes[index];

                        int addedIndex = list.arraySize;
                        list.InsertArrayElementAtIndex(addedIndex);
                        list.serializedObject.ApplyModifiedProperties();

                        BuildAction[] buildActions;
                        if (property.name.ToUpper().Contains("PRE"))
                        {
                            buildActions = BuildSettings.preBuildActions.buildActions;
                        }
                        else
                        {
                            buildActions = BuildSettings.postBuildActions.buildActions;
                        }

                        //buildActions[addedIndex] = Activator.CreateInstance(addedType) as BuildAction;
                        buildActions[addedIndex]            = ScriptableObject.CreateInstance(addedType) as BuildAction;
                        buildActions[addedIndex].name       = addedType.Name;
                        buildActions[addedIndex].actionName = addedType.Name;
                        buildActions[addedIndex].filter     = new BuildFilter();

                        AssetDatabase.AddObjectToAsset(buildActions[addedIndex], BuildSettings.instance);
                        AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance));

                        index = 0;
                    }

                    GUILayout.EndHorizontal();
                }
                else
                {
                    EditorGUILayout.HelpBox("No Build Actions found.", MessageType.Info);
                }

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
        private void DrawActions(SerializedProperty property)
        {
            for (int i = 0; i < list.arraySize; i++)
            {
                SerializedProperty listEntry = list.GetArrayElementAtIndex(i);

                BuildAction buildAction = listEntry.objectReferenceValue as BuildAction;
                if (buildAction == null)
                {
                    list.DeleteArrayElementAtIndex(i);
                    --i;
                    continue;
                }

                SerializedObject serializedBuildAction = new SerializedObject(buildAction);

                EditorGUILayout.BeginHorizontal();
                bool show = listEntry.isExpanded;

                buildAction.actionEnabled = EditorGUILayout.Toggle(buildAction.actionEnabled, GUILayout.Width(15));
                EditorGUI.BeginDisabledGroup(!buildAction.actionEnabled);
                UnityBuildGUIUtility.DropdownHeader(buildAction.actionName, ref show, false, GUILayout.ExpandWidth(true));
                EditorGUI.EndDisabledGroup();
                listEntry.isExpanded = show;

                EditorGUI.BeginDisabledGroup(i == 0);
                if (GUILayout.Button("↑↑", UnityBuildGUIUtility.helpButtonStyle))
                {
                    list.MoveArrayElement(i, 0);
                }
                if (GUILayout.Button("↑", UnityBuildGUIUtility.helpButtonStyle))
                {
                    list.MoveArrayElement(i, i - 1);
                }
                EditorGUI.EndDisabledGroup();

                EditorGUI.BeginDisabledGroup(i == list.arraySize - 1);
                if (GUILayout.Button("↓", UnityBuildGUIUtility.helpButtonStyle))
                {
                    list.MoveArrayElement(i, i + 1);
                }
                EditorGUI.EndDisabledGroup();

                if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                {
                    BuildAction[] buildActions;
                    if (property.name.ToUpper().Contains("PRE"))
                    {
                        buildActions = BuildSettings.preBuildActions.buildActions;
                    }
                    else
                    {
                        buildActions = BuildSettings.postBuildActions.buildActions;
                    }

                    // Destroy underlying object.
                    ScriptableObject.DestroyImmediate(buildActions[i], true);
                    AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance));

                    // Remove object reference from list.
                    // TODO: Why do I need to call this twice? First call nulls reference, second one then deletes null entry.
                    list.DeleteArrayElementAtIndex(i);
                    list.DeleteArrayElementAtIndex(i);
                    show = false;
                }

                EditorGUILayout.EndHorizontal();

                if (show && buildAction.actionEnabled)
                {
                    EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);
                    buildAction.Draw(serializedBuildAction);
                    EditorGUILayout.EndVertical();
                }
            }
        }
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            EditorGUILayout.BeginHorizontal();

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader("SceneList", ref show, false, GUILayout.ExpandWidth(true));
            property.isExpanded = show;

            EditorGUILayout.EndHorizontal();

            //Refresh all scene lists.
            for (int i = 0; i < BuildSettings.releaseTypeList.releaseTypes.Length; i++)
            {
                BuildReleaseType rt = BuildSettings.releaseTypeList.releaseTypes[i];
                rt.sceneList.Refresh();
            }

            list = property.FindPropertyRelative("enabledScenes");

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                SerializedProperty platformProperty;
                string             fileGUID;
                string             filePath;
                string             sceneName = "N/A";
                if (list.arraySize > 0)
                {
                    platformProperty = list.GetArrayElementAtIndex(0);
                    fileGUID         = platformProperty.FindPropertyRelative("fileGUID").stringValue;
                    filePath         = AssetDatabase.GUIDToAssetPath(fileGUID);
                    sceneName        = Path.GetFileNameWithoutExtension(filePath);
                }

                EditorGUILayout.BeginHorizontal();

                show = list.isExpanded;
                UnityBuildGUIUtility.DropdownHeader(string.Format("Scenes ({0}) (First Scene: {1})", list.arraySize, sceneName), ref show, false, GUILayout.ExpandWidth(true));
                list.isExpanded = show;

                EditorGUILayout.EndHorizontal();

                if (show)
                {
                    for (int i = 0; i < list.arraySize; i++)
                    {
                        platformProperty = list.GetArrayElementAtIndex(i);
                        fileGUID         = platformProperty.FindPropertyRelative("fileGUID").stringValue;
                        filePath         = AssetDatabase.GUIDToAssetPath(fileGUID);
                        sceneName        = Path.GetFileNameWithoutExtension(filePath);

                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.TextArea(sceneName + " (" + filePath + ")");

                        EditorGUI.BeginDisabledGroup(i == 0);
                        if (GUILayout.Button("↑↑", UnityBuildGUIUtility.helpButtonStyle))
                        {
                            list.MoveArrayElement(i, 0);
                        }
                        if (GUILayout.Button("↑", UnityBuildGUIUtility.helpButtonStyle))
                        {
                            list.MoveArrayElement(i, i - 1);
                        }
                        EditorGUI.EndDisabledGroup();

                        EditorGUI.BeginDisabledGroup(i == list.arraySize - 1);
                        if (GUILayout.Button("↓", UnityBuildGUIUtility.helpButtonStyle))
                        {
                            list.MoveArrayElement(i, i + 1);
                        }
                        EditorGUI.EndDisabledGroup();

                        if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                        {
                            list.DeleteArrayElementAtIndex(i);
                        }

                        property.serializedObject.ApplyModifiedProperties();

                        EditorGUILayout.EndHorizontal();
                    }
                }

                GUILayout.Space(20);

                Rect dropArea = GUILayoutUtility.GetRect(0, 50.0f, GUILayout.ExpandWidth(true));
                GUI.Box(dropArea, "Drag and Drop scene files here to add to list.", UnityBuildGUIUtility.dragDropStyle);
                Event currentEvent = Event.current;

                switch (currentEvent.type)
                {
                case EventType.DragUpdated:
                case EventType.DragPerform:
                    if (dropArea.Contains(currentEvent.mousePosition))
                    {
                        DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                        if (currentEvent.type == EventType.DragPerform)
                        {
                            DragAndDrop.AcceptDrag();

                            foreach (Object obj in DragAndDrop.objectReferences)
                            {
                                if (obj.GetType() == typeof(UnityEditor.SceneAsset))
                                {
                                    string objFilepath = AssetDatabase.GetAssetPath(obj);
                                    string objGUID     = AssetDatabase.AssetPathToGUID(objFilepath);
                                    AddScene(objGUID);
                                }
                            }

                            if (list.arraySize >= AUTO_COLLAPSE_SIZE)
                            {
                                list.isExpanded = false;
                            }
                        }
                    }
                    break;
                }

                if (GUILayout.Button("Clear Scene List", GUILayout.ExpandWidth(true)))
                {
                    list.ClearArray();
                }

                if (GUILayout.Button("Add Scene File Directory", GUILayout.ExpandWidth(true)))
                {
                    GetSceneFileDirectory("Add Scene Files");
                }

                if (GUILayout.Button("Set First Scene by File", GUILayout.ExpandWidth(true)))
                {
                    SetFirstSceneByFile();
                }

                list.serializedObject.ApplyModifiedProperties();
                property.serializedObject.ApplyModifiedProperties();

                EditorGUILayout.EndVertical();
            }

            EditorGUI.EndProperty();
        }
Ejemplo n.º 16
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, GUIContent.none, property);

            bool show = property.isExpanded;

            UnityBuildGUIUtility.DropdownHeader(property.FindPropertyRelative("platformName").stringValue, ref show, false);
            property.isExpanded = show;

            if (show)
            {
                EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle);

                SerializedProperty archList = property.FindPropertyRelative("architectures");

                if (archList.arraySize > 1)
                {
                    GUILayout.Label("Architectures", UnityBuildGUIUtility.midHeaderStyle);
                    for (int i = 0; i < archList.arraySize; i++)
                    {
                        SerializedProperty archProperty = archList.GetArrayElementAtIndex(i);
                        SerializedProperty archName     = archProperty.FindPropertyRelative("name");
                        SerializedProperty archEnabled  = archProperty.FindPropertyRelative("enabled");

                        archEnabled.boolValue = GUILayout.Toggle(archEnabled.boolValue, archName.stringValue);
                        archProperty.serializedObject.ApplyModifiedProperties();
                    }
                }

                SerializedProperty distList = property.FindPropertyRelative("distributionList.distributions");

                if (distList.arraySize > 0)
                {
                    GUILayout.Space(20);
                    GUILayout.Label("Distributions", UnityBuildGUIUtility.midHeaderStyle);

                    for (int i = 0; i < distList.arraySize; i++)
                    {
                        SerializedProperty dist        = distList.GetArrayElementAtIndex(i);
                        SerializedProperty distEnabled = dist.FindPropertyRelative("enabled");
                        SerializedProperty distName    = dist.FindPropertyRelative("distributionName");

                        GUILayout.BeginHorizontal();

                        distEnabled.boolValue = GUILayout.Toggle(distEnabled.boolValue, GUIContent.none, GUILayout.ExpandWidth(false));
                        distName.stringValue  = BuildProject.SanitizeFolderName(GUILayout.TextField(distName.stringValue));

                        if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle))
                        {
                            distList.DeleteArrayElementAtIndex(i);
                        }

                        dist.serializedObject.ApplyModifiedProperties();

                        GUILayout.EndHorizontal();
                    }
                }

                GUILayout.Space(10);
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                GUILayout.BeginVertical();
                if (GUILayout.Button("Add Distribution", GUILayout.MaxWidth(150)))
                {
                    int addedIndex = distList.arraySize;
                    distList.InsertArrayElementAtIndex(addedIndex);

                    SerializedProperty addedProperty = distList.GetArrayElementAtIndex(addedIndex);
                    addedProperty.FindPropertyRelative("enabled").boolValue            = true;
                    addedProperty.FindPropertyRelative("distributionName").stringValue = "DistributionName";

                    addedProperty.serializedObject.ApplyModifiedProperties();
                    distList.serializedObject.ApplyModifiedProperties();
                    property.serializedObject.ApplyModifiedProperties();
                    GUIUtility.keyboardControl = 0;
                }
                if (GUILayout.Button("Delete", GUILayout.MaxWidth(150)))
                {
                    property.FindPropertyRelative("enabled").boolValue = false;
                }
                GUILayout.EndVertical();
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();

                EditorGUILayout.EndVertical();
            }

            property.serializedObject.ApplyModifiedProperties();

            EditorGUI.EndProperty();
        }