Unity Custom Editor

💡Custom Editor

 Custom Editor란 Unity에서 Editor를 커스터마이징 한다는 뜻이다

커스터마이징을 통해 개발자들은 유니티 에디터 자체에 특정 기능을 추가할 수 있다

예를 들면, 인스펙터창에 특정 버튼을 누르면 특정 에셋들이 Load 된다거나, 자동으로 맵을 생성해준다거나 등등 잘 활용만 한다면 개발하는데 엄청난 편의성을 느낄 수 있다

 

💡유니티 에디터 커스터마이징을 하기 위해서는 몇가지 개념들을 알아두어야 한다

 먼저, 유니티 에디터 코드가 동작하는 레벨에 대해 알 필요가 있다

우리가 흔히 사용하는 C# 스크립트들은 모든 레벨에서 사용이 가능하다

즉, 빌드 된 환경에서도 동작하고, 유니티 에디터 환경에서도 잘 동작한다는 뜻이다

 

하지만, 에디터 코드는 에디터 환경에서만 동작하고 빌드 된 환경에서는 아예 코드 바이너리가 포함되어 있지 않도록 되어있다

그렇기에 유니티에서는 따로 Editor폴더라는 곳이 있으며, 빌드시 Editor폴더는 포함시키지 않는다. 따라서, 에디터 코드와 관련된 것들은 Editor폴더 안에 집어넣어야 한다

 

Editor 폴더

💡스크립터블 오브젝트 코드를 작성하면서 만들어둔 SpawnMonster.cs를 이용해서 에디터 커스터마이징을 이용해보자

Editor 폴더안에 EditorTest스크립트를 하나 생성하자!

 

EditorTest.cs 의 내용은 아래와 같다!

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(SpawnMonster))]
public class EditorTest : Editor
{
    public override void OnInspectorGUI()
    {
        SpawnMonster spawnMonster = (SpawnMonster)target;
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Generate Monsters"))
        {
            spawnMonster.SpawnMonsterObject();
        }
        GUILayout.EndHorizontal();
    }
}

위에서부터 알아보자

💡[CustomEditor(typeof(SpawnMonster))]

더보기

에디터 클래스에서 어떤 형태(여기선 SpawnMonster라는 Class)가 런타임이 될지 말해준다

💡EditorTest : Editor

더보기

Editor를 상속받는다는 뜻

💡OnInspectorGUI()

더보기

선택한 오브젝트가 인스펙터 윈도우 창에 표시될 때 호출되는 함수

💡target

더보기

target은 선택되어 인스펙터 윈도우에 표시되는 객체

💡GUILayout.Button

더보기

인스펙터 윈도우에 Button을 생성해준다

 

Button 외에 수많은 메서드가 있다

필요에 따라 사용하면 된다

예를 들어,HP에 10f 값을 할당해주려면 이렇게 하면된다~

 

EditorGUILayout나 GUILayout 는 비슷하므로 그냥 상황에 맞게 사용하면 된다!