유니티 Editor 가져오기

ㅋㅋ·2022년 9월 7일
0
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 클래스를 통해 에디터의 특정 객체들을 선택하도록 수정할 수 있음

0개의 댓글