using UnityEngine; using UnityEditor; using System.Linq; namespace DDD.Editors { public class HierarchySorter : EditorWindow { private string _baseName = ""; // 기본 이름 private 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"); } private 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(); } } private void RenameChildren() { var selectedObject = Selection.activeGameObject; if (selectedObject != null) { Undo.SetCurrentGroupName("Rename Child Objects"); var group = Undo.GetCurrentGroup(); for (var i = 0; i < selectedObject.transform.childCount; i++) { var child = selectedObject.transform.GetChild(i).gameObject; Undo.RecordObject(child, "Rename Child"); var newName = _baseName + " (" + GetFormattedNumber(1 + 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(); } } } }