Version: 2023.1
언어: 한국어
Extending the Editor with IMGUI
프로퍼티 드로어

에디터 창

Note: It’s strongly recommended to use the UI Toolkit to extend the Unity Editor, as it provides a more modern, flexible, and scalable solution than IMGUI.

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

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

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

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

에디터 창에서 파생

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

using UnityEngine;
using UnityEditor;
using System.Collections;

public class Example : EditorWindow

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

MyWindow.cs - placed in a folder called ‘Editor’ within your project.

창 표시

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

The default behavior in Unity is to recycle windows, so selecting the menu item again would show existing windows. This is done by using the function EditorWindow.GetWindow Like this:

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 ();
    }
}

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

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

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

Extending the Editor with IMGUI
프로퍼티 드로어
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961