에셋을 받다보면 에디터 자체에 메뉴가 생기는 경우를 본 적이 있을것이다.


이 기능을 EditorWindow라고 하는데 굉장히 쉽게 만들 수 있다.

1
2
3
4
5
6
7
using UnityEditor;
public class TestEditor : EditorWindow {
    [MenuItem("Custom/ColliderSelector")]
    static void Init()
    {
        TestEditor window = (TestEditor)EditorWindow.GetWindow(typeof(TestEditor));
    }
cs

우선 EditorWindow를 상속받는 스크립트를 하나 만든 후에 위와 같이 Init()함수를 작성해준 뒤

MenuItem 속성을 붙여준다. "폴더명/메뉴명" 느낌으로 작성하면 된다.



이후 OnGUI() 함수에 구현할 내용을 적어주면 끝이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
 
public class TestEditor : EditorWindow {
    [MenuItem("Custom/ColliderSelector")]
    static void Init()
    {
        TestEditor window = (TestEditor)EditorWindow.GetWindow(typeof(TestEditor));
    }
 
    // 그려주는 함수
    private void OnGUI()
    {
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("동그라미 선택"))
        {
            SphereCollider[] colliders = FindObjectsOfType(typeof(SphereCollider)) as SphereCollider[];
 
            List<GameObject> listGO = new List<GameObject>();
            if(colliders != null)
            {
                for (int i = 0; i < colliders.Length; i++)
                    listGO.Add(colliders[i].gameObject);
            }
 
            Selection.objects = listGO.ToArray();
        }
 
        if (GUILayout.Button("네모 선택"))
        {
            BoxCollider[] colliders = FindObjectsOfType(typeof(BoxCollider)) as BoxCollider[];
 
            List<GameObject> listGO = new List<GameObject>();
            if (colliders != null)
            {
                for (int i = 0; i < colliders.Length; i++)
                    listGO.Add(colliders[i].gameObject);
            }
 
            Selection.objects = listGO.ToArray();
        }
 
        if (GUILayout.Button("콜라이더 전체 선택"))
        {
            Collider[] colliders = FindObjectsOfType(typeof(Collider)) as Collider[];
 
            List<GameObject> listGO = new List<GameObject>();
            if (colliders != null)
            {
                for (int i = 0; i < colliders.Length; i++)
                    listGO.Add(colliders[i].gameObject);
            }
 
            Selection.objects = listGO.ToArray();
        }
        EditorGUILayout.EndHorizontal();
    }
}
 
cs


해당 버튼을 누르면 SphereCollider, BoxCollider, 모든 Collider를 가진 오브젝트들을 하이어라키에서 선택해준다.

(네모 선택 버튼을 눌렀을 때)


이런식으로 원하는 에디터윈도우를 만들 수 있다.

https://docs.unity3d.com/kr/current/ScriptReference/EditorWindow.html

Posted by misty_
,