if (Selection.objects != null && Selection.objects.Length == 1)
{
var target = Selection.objects[0];
if (duplicatedDetailEditor == null || duplicatorEditor.name != target.name)
{
duplicatorEditor = Editor.CreateEditor(target);
var go = target as GameObject;
if (go != null)
{
var allComponents = go.GetComponents(typeof(Component));
if (allComponents != null)
{
duplicatedDetailEditor = new Editor[allComponents.Length];
for (int i = 0; i < allComponents.Length; i++)
{
detailFoldOut.Add(false);
duplicatedDetailEditor[i] = Editor.CreateEditor(allComponents[i]);
}
}
}
}
}
Selection 클래스를 통해 에디터에서 현재 클릭하고 있는 객체들의 정보를 가져올 수 있음
그리고 Editor.CreateEditor를 통하여 에디터를 만들어낼 수 있고,
선택되어 있는 객체를 인자로 넣을 시 복사가 된다.
if (duplicatorEditor != null)
{
duplicatorEditor.DrawHeader();
duplicatorEditor.OnInspectorGUI();
for (int i = 0; i < duplicatedDetailEditor.Length; i++)
{
detailFoldOut[i] = EditorGUILayout.Foldout(detailFoldOut[i], $"{duplicatedDetailEditor[i].GetType()}");
if (detailFoldOut[i])
{
duplicatedDetailEditor[i].OnInspectorGUI();
}
}
}
DrawHeader 함수로 인스펙터에서 이름과 태그등을 설정할 수 있던 헤더를 그릴 수 있고,
OnInspectorGUI로 인스펙터에 그려지던 GUI를 그릴 수 있다.
if (GUILayout.Button("select all texts"))
{
var targets = FindObjectsOfType<UnityEngine.UI.Text>(true);
if (targets != null)
{
GameObject[] gos = new GameObject[targets.Length];
for (int i = 0; i < targets.Length; i++)
{
gos[i] = targets[i].gameObject;
}
Selection.objects = gos;
}
}
Selection 클래스를 통해 에디터의 특정 객체들을 선택하도록 수정할 수 있음