2024-06-03 18:26:03 +00:00
|
|
|
using UnityEngine;
|
|
|
|
using UnityEditor;
|
|
|
|
using System.Linq;
|
|
|
|
|
2025-02-10 02:13:46 +00:00
|
|
|
namespace DDD.Editors
|
2024-06-03 18:26:03 +00:00
|
|
|
{
|
|
|
|
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<Transform>().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<Transform>().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<HierarchySorter>("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();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|