using UnityEngine; using UnityEditor; using System.Linq; // ReSharper disable once CheckNamespace namespace BlueWaterProject { public class HierarchySorter : EditorWindow { string baseName = ""; // 기본 이름 int numberingStyle = 1; // 숫자 스타일 [MenuItem("Tools/Sort Children by Name")] private static void SortChildrenByName() { if (Selection.activeTransform != null) { Undo.RecordObject(Selection.activeTransform.gameObject, "Sort Children by Name"); var children = Selection.activeTransform.Cast().OrderBy(t => t.name).ToList(); for (var i = 0; i < children.Count; i++) { children[i].SetSiblingIndex(i); } EditorUtility.SetDirty(Selection.activeTransform.gameObject); } else { Debug.LogError("No object selected in the hierarchy"); } } [MenuItem("Tools/Sort Children of Selected Objects by Name")] private static void SortChildrenOfSelectedObjectsByName() { foreach (var parentTransform in Selection.transforms) { Undo.RecordObject(parentTransform.gameObject, "Sort Children by Name"); var children = parentTransform.Cast().OrderBy(t => t.name).ToList(); for (var i = 0; i < children.Count; i++) { children[i].SetSiblingIndex(i); } EditorUtility.SetDirty(parentTransform.gameObject); } } [MenuItem("Tools/Rename Child Objects Window")] public static void ShowWindow() { GetWindow("Rename Child Objects"); } void OnGUI() { GUILayout.Label("Base Settings", EditorStyles.boldLabel); baseName = EditorGUILayout.TextField("Base Name", baseName); numberingStyle = EditorGUILayout.IntSlider("Numbering Style", numberingStyle, 1, 3); if (GUILayout.Button("Rename Children")) { RenameChildren(); } } void RenameChildren() { GameObject selectedObject = Selection.activeGameObject; if (selectedObject != null) { Undo.SetCurrentGroupName("Rename Child Objects"); int group = Undo.GetCurrentGroup(); int startNumber = 1; // 시작 숫자 설정 for (int i = 0; i < selectedObject.transform.childCount; i++) { GameObject child = selectedObject.transform.GetChild(i).gameObject; Undo.RecordObject(child, "Rename Child"); string newName = baseName + " (" + GetFormattedNumber(startNumber + i, numberingStyle) + ")"; child.name = newName; } Undo.CollapseUndoOperations(group); } else { Debug.LogWarning("선택된 오브젝트가 없습니다."); } } private static string GetFormattedNumber(int number, int style) { switch (style) { case 1: // (1), (2), (3), ... return number.ToString(); case 2: // (01), (02), (03), ... return number.ToString("D2"); case 3: // (001), (002), (003), ... return number.ToString("D3"); default: return number.ToString(); } } } }