Version: 2023.2
언어: 한국어
IMGUI로 에디터 확장
프로퍼티 드로어

에디터 창

참고:Unity 에디터를 확장하려면 UI Toolkit을 사용할 것을 강력히 권장하며, 이는 IMGUI보다 더 최신의 유연하고 확장 가능한 솔루션을 제공하기 때문입니다.

애플리케이션에 커스텀 창을 얼마든지 생성할 수 있습니다. 커스텀 창은 인스펙터, 씬 또는 기타 빌트인 창처럼 작동합니다. 이 방법은 게임의 하위시스템에 사용자 인터페이스를 추가하는 데 유용합니다.

컷씬 액션 스크립팅에 사용되는 기능성 게임 인터렉티브에 의한 커스텀 에디터 인터페이스
컷씬 액션 스크립팅에 사용되는 기능성 게임 인터렉티브에 의한 커스텀 에디터 인터페이스

아래의 간단한 절차를 따라 커스텀 에디터 창을 만들 수 있습니다.

  • 에디터 창에서 파생되는 스크립트를 작성합니다.
  • 코드를 사용하여 창이 자동으로 표시되도록 합니다.
  • 툴에 대한 GUI 코드를 구현합니다.

에디터 창에서 파생

커스텀 에디터 창을 만들기 위해서는 스크립트를 “Editor”라는 폴더 안에 저장해야 합니다. 에디터 창에서 파생되는 이 스크립트에 클래스를 만든 다음, 내부 OnGUI 함수에 GUI 컨트롤을 작성합니다.

using UnityEngine;
using UnityEditor;
using System.Collections;

public class Example : EditorWindow

    {
        void OnGUI () {
            // The actual window code goes here
           }
    }

프로젝트 내 ‘Editor’ 폴더에 있는 MyWindow.cs

창 표시

화면에 창을 표시하려면 창을 표시하는 메뉴 아이템을 생성합니다. 이 작업은 MenuItem 프로퍼티를 통해 활성화되는 함수를 작성하여 수행합니다.

Unity의 기본 동작은 창을 다시 사용하는 것이므로 메뉴 항목을 다시 선택하면 기존 창이 표시됩니다.이 작업은 다음과 같이 EditorWindow.GetWindow 함수를 사용하여 수행됩니다.

using UnityEngine;
using UnityEditor;
using System.Collections;

class MyWindow : EditorWindow {
    [MenuItem ("Window/My Window")]

    public static void  ShowWindow () {
        EditorWindow.GetWindow(typeof(MyWindow));
    }
    
    void OnGUI () {
        // The actual window code goes here
    }
}

MyWindow 표시

호출 간 포지션을 저장하거나 커스텀 레이아웃에 사용하는 등 도킹 가능한 스탠다드 에디터 창을 생성할 수 있습니다. 생성한 창에 더 많은 컨트롤을 적용하려면 GetWindowWithRect를 사용할 수 있습니다.

창의 GUI 구현

창의 실제 콘텐츠는 OnGUI 함수를 구현하여 렌더링합니다. 인게임 GUI(GUIGUILayout)에 사용하는 것과 동일한 UnityGUI 클래스를 사용할 수 있습니다. 또한 EditorGUIEditorGUILayout 에디터 전용 클래스에 있는 GUI 컨트롤도 몇 개 더 제공됩니다. 이 클래스는 일반 클래스에 이미 사용 가능한 컨트롤에 추가되므로 원하는 경우 믹스 앤 매치를 할 수 있습니다.

다음 C# 코드는 커스텀 에디터 창에 GUI 요소를 추가하는 방법을 나타냅니다.

using UnityEditor;
using UnityEngine;

public class MyWindow : EditorWindow
{
    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;
    
    // Add menu item named "My Window" to the Window menu
    [MenuItem("Window/My Window")]
    public static void ShowWindow()
    {
        //Show existing window instance. If one doesn't exist, make one.
        EditorWindow.GetWindow(typeof(MyWindow));
    }
    
    void OnGUI()
    {
        GUILayout.Label ("Base Settings", EditorStyles.boldLabel);
        myString = EditorGUILayout.TextField ("Text Field", myString);
        
        groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
            myBool = EditorGUILayout.Toggle ("Toggle", myBool);
            myFloat = EditorGUILayout.Slider ("Slider", myFloat, -3, 3);
        EditorGUILayout.EndToggleGroup ();
    }
}

위의 예제를 통해 생성된 창은 다음과 같습니다.

제공된 예제를 사용하여 생성한 커스텀 에디터 창
제공된 예제를 사용하여 생성한 커스텀 에디터 창

자세한 내용은 에디터 창 페이지의 예제와 문서를 참조하십시오.

IMGUI로 에디터 확장
프로퍼티 드로어