Exemple #1
0
        /// <summary>
        /// Set existing numbers based on the naming scheme set in the project settings
        /// </summary>
        /// <param name="objects">The list of objects to get the names from</param>
        /// <param name="ExistingNumbers">The list of ExistingNumbers to set</param>
        /// <param name="namingScheme">The naming scheme to use</param>
        void SetExistingNumbers(List <GameObject> objects, List <int> ExistingNumbers, EditorSettings.NamingScheme namingScheme)
        {
            foreach (GameObject obj in objects)
            {
                string name = obj.name;
                if (name.Contains(prefab.name) && name.Any(char.IsDigit))
                {
                    int num = 0;
                    switch (namingScheme)
                    {
                    case EditorSettings.NamingScheme.SpaceParenthesis:
                        char[] charsToTrim = { '(', ')' };
                        num = GetExistingNumber(name, name.Split(' '), charsToTrim);
                        break;

                    case EditorSettings.NamingScheme.Dot:
                        num = GetExistingNumber(name, name.Split('.'));
                        break;

                    case EditorSettings.NamingScheme.Underscore:
                        num = GetExistingNumber(name, name.Split('_'));
                        break;
                    }
                    if (num != 0)
                    {
                        ExistingNumbers.Add(num);
                    }
                    else
                    {
                        Debug.LogError("The selected object cannot be renamed, as there are several naming schemes used");
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Gets the currently selected game objects.
        /// </summary>
        void GetSelection()
        {
            namingScheme = EditorSettings.gameObjectNamingScheme;

            if (editMode && Selection.activeGameObject != null && (prefab == null || (!SearchWithTag && !SearchWithLayer)))
            {
                if (prefab == null) // get the prefab 1st
                {
                    PrefabAssetType t = PrefabUtility.GetPrefabAssetType(Selection.activeGameObject);

                    if (t == PrefabAssetType.Regular || t == PrefabAssetType.Variant)
                    {
                        prefab    = Selection.activeGameObject;
                        oldPrefab = Selection.activeGameObject;
                    }
                }
                else // get the other objects
                {
                    ResetPreview();
                    objectPreview.Clear();
                    objectsToReplace.Clear();
                    foreach (var obj in Selection.gameObjects)
                    {
                        if (obj != prefab)
                        {
                            objectsToReplace.Add(obj);
                        }
                    }
                }
            }
            if (editMode && prefab != null && (SearchWithTag || SearchWithLayer))
            {
                if (SearchWithTag)
                {
                    ResetPreview();
                    objectPreview.Clear();
                    objectsToReplace.Clear();
                    GameObject[] allGameObjects = GameObject.FindObjectsOfType <GameObject>();
                    foreach (var gg in allGameObjects)
                    {
                        if (gg.tag == TagForSearch)
                        {
                            if (gg != prefab)
                            {
                                objectsToReplace.Add(gg);
                            }
                        }
                    }
                }
                else if (SearchWithLayer)
                {
                    ResetPreview();
                    objectPreview.Clear();
                    objectsToReplace.Clear();
                    GameObject[] allGameObjects = GameObject.FindObjectsOfType <GameObject>();
                    foreach (var gg in allGameObjects)
                    {
                        if (gg.layer == LayerForSearch)
                        {
                            if (gg != prefab)
                            {
                                objectsToReplace.Add(gg);
                            }
                        }
                    }
                }
            }
            else if (editMode && Selection.activeGameObject == null && prefab != null && !SearchWithTag && !SearchWithLayer)
            {
                ResetPreview();
                objectPreview.Clear();
                objectsToReplace.Clear();
            }
        }
Exemple #3
0
        /// <summary>
        /// Draws the window content: object list, configuration and execution buttons.
        /// </summary>
        void OnGUI()
        {
            #region Draw Top Buttons

            GUILayout.BeginHorizontal(EditorStyles.toolbar);
            {
                editMode = GUILayout.Toggle(editMode, new GUIContent("Start replacing", "Start using this feature"), EditorStyles.toggle);
                GUILayout.FlexibleSpace();
            }
            GUILayout.EndHorizontal();
            #endregion

            #region "TAG LAYER"

            SearchWithTag   = GUILayout.Toggle(!SearchWithLayer ? SearchWithTag : false, "Apply Search By Tag", EditorStyles.toggle);
            SearchWithLayer = GUILayout.Toggle(!SearchWithTag ? SearchWithLayer : false, "Apply Search By Layer");

            if (SearchWithTag)
            {
                GUILayout.Space(5);
                TagForSearch = EditorGUILayout.TagField("Set tag :  ", TagForSearch);
            }
            else if (SearchWithLayer)
            {
                GUILayout.Space(5);
                LayerForSearch = EditorGUILayout.LayerField("Set layer :  ", LayerForSearch);
            }
            #endregion "TAG LAYER"

            if (GUI.changed)
            {
                if (editMode)
                {
                    GetSelection();
                }
                else
                {
                    ResetPreview();
                }
            }

            GUILayout.Space(10);
            if (editMode)
            {
                namingScheme = EditorSettings.gameObjectNamingScheme;
                RenamePreview();

                #region Draw Prefab and List

                GUILayout.Label("Prefab: ", EditorStyles.boldLabel);
                prefab = (GameObject)EditorGUILayout.ObjectField(prefab, typeof(GameObject), true);
                if (oldPrefab != prefab)
                {
                    GetSelection();
                    oldPrefab = prefab;
                }
                GUILayout.Space(10);

                if (prefab != null)
                {
                    if (objectsToReplace.Count > 0)
                    {
                        GUILayout.Label(new GUIContent("Objects to be Replaced:", (!SearchWithTag && !SearchWithLayer) ? "Multi-select all the objects you want to replace with your Prefab" : ""), EditorStyles.boldLabel);

                        objectPreview.Sort(new NaturalComparer());

                        scrollPosition = GUILayout.BeginScrollView(scrollPosition, EditorStyles.helpBox);
                        {
                            GUILayout.BeginHorizontal(EditorStyles.helpBox);
                            {
                                string previewText = "No Preview";

                                if (replacementPreferences.renameObjects && !replacementPreferences.orderHierarchyToPreview)
                                {
                                    previewText = "Preview of Renaming";
                                }
                                else if (replacementPreferences.orderHierarchyToPreview && !replacementPreferences.renameObjects)
                                {
                                    previewText = "Preview of Hierarchy Order";
                                }
                                else if (replacementPreferences.orderHierarchyToPreview && replacementPreferences.renameObjects)
                                {
                                    previewText = "Preview of Renaming and Hierarchy Order";
                                }

                                GUILayout.Label(previewText, EditorStyles.miniLabel);
                            }
                            GUILayout.EndHorizontal();

                            foreach (string go in objectPreview)
                            {
                                GUILayout.BeginHorizontal(EditorStyles.toolbar);
                                GUILayout.Label(go);
                                GUILayout.EndHorizontal();
                            }
                            GUILayout.Space(2);
                        }
                        GUILayout.EndScrollView();

                        GUILayout.Space(5);

                        replacementPreferences.renameObjects           = GUILayout.Toggle(replacementPreferences.renameObjects, "Rename replaced objects", EditorStyles.toggle);
                        replacementPreferences.orderHierarchyToPreview = GUILayout.Toggle(replacementPreferences.orderHierarchyToPreview, "Oder hierarchy to preview", EditorStyles.toggle);
                        GUILayout.Space(10);
                        replacementPreferences.applyRotation = GUILayout.Toggle(replacementPreferences.applyRotation, "Apply rotation", EditorStyles.toggle);
                        replacementPreferences.applyScale    = GUILayout.Toggle(replacementPreferences.applyScale, "Apply scale", EditorStyles.toggle);
                    }
                    else if (!SearchWithTag && !SearchWithLayer)
                    {
                        GUILayout.Label(new GUIContent("Multi-select all the objects you want to replace with your Prefab"), EditorStyles.boldLabel);
                    }
                }
                else
                {
                    GUILayout.Label("Select a Prefab to replace objects with", EditorStyles.boldLabel);
                }
                #endregion

                #region Draw Bottom Buttons

                GUILayout.Space(5);
                GUILayout.BeginHorizontal();
                {
                    if (prefab != null && objectsToReplace.Count > 0)
                    {
                        if (GUILayout.Button("Apply"))
                        {
                            foreach (GameObject go in objectsToReplace)
                            {
                                Replace(go);
                                DestroyImmediate(go);
                            }
                            if (replacementPreferences.renameObjects)
                            {
                                Rename();
                            }
                            editMode = false;
                            EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); // Important so that we don't forget to save!
                        }
                        else if (GUILayout.Button("Cancel"))
                        {
                            objectsToReplace.Clear();
                            objectPreview.Clear();
                            ResetPreview();
                            prefab = null;
                        }
                    }
                }
                GUILayout.EndHorizontal();
                #endregion
            }
            else
            {
                objectsToReplace.Clear();
                objectPreview.Clear();
                newObjects.Clear();
                prefab = null;
            }
        }