내일배움캠프

내일배움캠프 Unity - TIL : 25.03.26

달시_Dalsi 2025. 3. 26. 20:55
728x90

개요

Unity의 기본 인스펙터는 자동으로 MonoBehaviour 스크립트의 변수를 표시하지만, 복잡한 기능을 추가하기에는 한계가 있습니다.
이를 해결하기 위해 CustomEditor를 사용하면 사용자 정의 UI 및 기능을 인스펙터에 추가할 수 있습니다.


CustomEditor를 활용한 기본적인 확장

using UnityEditor;
using UnityEngine;

// MyComponent의 인스펙터를 확장하는 Custom Editor
[CustomEditor(typeof(MyComponent))]
public class MyComponentEditor : Editor
{
    public override void OnInspectorGUI()
    {
        // 기존 인스펙터 UI 유지
        DrawDefaultInspector();

        // 대상 스크립트 가져오기
        MyComponent myComponent = (MyComponent)target;

        // 커스텀 UI 요소 추가
        EditorGUILayout.LabelField("Custom Inspector", EditorStyles.boldLabel);
        EditorGUILayout.HelpBox("이 버튼을 누르면 speed 값을 변경할 수 있습니다.", MessageType.Info);

        // 버튼 추가
        if (GUILayout.Button("Set Speed to 10"))
        {
            myComponent.speed = 10f;
        }
    }
}

// 기본 MonoBehaviour 스크립트
public class MyComponent : MonoBehaviour
{
    public float speed = 5f;
}

 

 

결과 사진

 


CustomEditor 개념 정리

CustomEditor(typeof(MyComponent))

  • 특정 컴포넌트(MyComponent)의 기본 인스펙터를 커스텀하도록 설정합니다.
  • 해당 컴포넌트를 선택하면, MyComponentEditor에서 정의한 UI가 표시됩니다.

DrawDefaultInspector()

  • Unity의 기본 인스펙터 UI를 그대로 유지하면서, 추가적인 UI 요소만 삽입할 수 있습니다.
  • 기본 인스펙터를 완전히 대체하려면 이 줄을 제거하고 EditorGUILayout 등을 이용해 직접 UI를 구성해야 합니다.

EditorGUILayout.LabelField()

  • 텍스트 라벨을 추가하는 메서드입니다.
  • EditorStyles.boldLabel을 사용하면 굵은 글씨로 강조할 수 있습니다.

EditorGUILayout.HelpBox()

  • 설명 및 도움말 박스를 추가할 수 있습니다.
  • MessageType.Info, MessageType.Warning, MessageType.Error 등의 옵션을 통해 메시지 스타일을 지정할 수 있습니다.

GUILayout.Button()

  • 버튼을 추가하는 메서드입니다.
  • 클릭하면 특정 기능을 수행하도록 설정할 수 있습니다.

결과

Custom Editor 적용 전

  • speed 값이 기본 인스펙터에 숫자 입력란으로만 표시됩니다.

 


Custom Editor 적용 후

  • 굵은 제목(Label)과 도움말(HelpBox)이 추가되었습니다.
  • "Set Speed to 10" 버튼을 클릭하면 speed 값이 10으로 변경됩니다.


 

728x90