Version: Unity 6.0 (6000.0)
언어 : 한국어
IMGUI로 에디터 확장
프로퍼티 드로어를 IMGUI와 함께 사용하여 인스펙터 커스터마이즈

IMGUI를 사용하여 커스텀 에디터 창 생성

참고: Unity 에디터를 확장하려면 IMGUI보다 더 현대적이고 유연하며 확장 가능한 솔루션을 제공하는 UI 툴킷을 사용할 것을 강력히 권장합니다.

앱에서 커스텀 창을 원하는 수만큼 생성할 수 있습니다. 인스펙터, 씬, 기타 빌트인 창과 동일하게 작동합니다. 이를 통해 게임의 보조 시스템에 사용자 인터페이스를 추가할 수 있습니다.

컷씬 액션 스크립팅에 사용되는 Serious Games Interactive의 커스텀 에디터 인터페이스
컷씬 액션 스크립팅에 사용되는 Serious Games Interactive의 커스텀 에디터 인터페이스

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

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

EditorWindow에서 파생 에디터 창을 만들려면 스크립트를 ’Editor’라는 폴더 안에 저장해야 합니다. EditorWindow에서 파생되는 스크립트의 클래스를 만듭니다. 그런 다음 내부 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에 사용하는 것과 동일한 UnityGUI 클래스(GUIGUILayout)를 사용할 수 있습니다. 또한 에디터 전용 클래스인 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 ();
    }
}

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

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

자세한 내용은 EditorWindow 페이지의 예시와 기술 자료를 참조하십시오.

IMGUI로 에디터 확장
프로퍼티 드로어를 IMGUI와 함께 사용하여 인스펙터 커스터마이즈