본문 바로가기
유니티/개념 정리

Custom Editor

by fore4022 2025. 4. 28.

어느날 SO를 만들면서, 하나의 SO에서 어떤 타입인지에 따라서 서로 다른 정보를 수정할 수 있게 표시해 주었으면 한다는 생각이 들었다. 이때 처음으로 Custom Editor를 사용해 보았다.

커스텀 에디터를 사용하는 방법은 다양하지만, 여기서는 제가 사용한 구현 예시만 있습니다.


Custom Editor란?

에디터의 인스펙터에서 보여지는 필드 값들에 대한 시각적 편의와 관리를 위한 기능을 사용자가 추가적으로 구현할 수 있다.

"필드의 bool을 이용해서 필드를 표시하는 것을 토글로 구현할 수 있다."

위와 같은 기능을 구현하는 것이 Custom Editor이다.


구현 방법

Custom Editor를 만들기 위해서 만드는 스크립트는 일반적인 스크립트와는 다르다.

  1. Editor 클래스를 상속받아야 한다.
  2. Assets/Editor/ 폴더 내에 위치 시켜야 한다.
    1. Custom Editor라는 이름에서 알 수 있듯이 Editor 환경에서만 사용되기 때문에, Editor 폴더에 위치시켜 놓으면 빌드에 포함되지 않는다.
  3. 구현은 OnInspectorGUI에서 해주어야 한다.
    1. 마지막에 serializedObject.ApplyModifiedProperties()를 호출해 주어야 Custom Editor의 변경 사항이 적용된다.

구현 예시

using UnityEngine;
using System;
[Serializable]
public class Value
{
    public float a;
    public float b;
}
[CreateAssetMenu(fileName = "Example", menuName = "Create New SO/Create New Example_SO")]
public class Example_SO : ScriptableObject
{
		public Value value;

    public bool visible = false;
}
using UnityEditor;
[CustomEditor(typeof(Example_SO))]
public class ExampleSO_Editor : Editor
{
    private SerializedProperty show;
    private SerializedProperty value;

    private void OnEnable()
    {
        show = serializedObject.FindProperty("visible");
        value = serializedObject.FindProperty("value");
    }
    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        DrawPropertiesExcluding(serializedObject, "value");

        Show_1();

        serializedObject.ApplyModifiedProperties();
    }
    private void Show_1()
    {
        if(show.boolValue)
        {
            EditorGUILayout.PropertyField(value);
        }
    }
}

'유니티 > 개념 정리' 카테고리의 다른 글

메서드 체이닝  (0) 2025.06.30
SerializedProperty  (0) 2025.04.28
const와 readonly  (0) 2025.04.01
Text와 TextMeshPro  (0) 2024.12.17
StringBuilder  (0) 2024.12.10