참고: Unity 에디터를 확장하려면 IMGUI보다 더 현대적이고 유연하며 확장 가능한 솔루션을 제공하는 UI 툴킷을 사용할 것을 강력히 권장합니다.
앱에서 커스텀 창을 원하는 수만큼 생성할 수 있습니다. 인스펙터, 씬, 기타 빌트인 창과 동일하게 작동합니다. 이를 통해 게임의 보조 시스템에 사용자 인터페이스를 추가할 수 있습니다.
아래의 간단한 절차를 따라 커스텀 에디터 창을 만들 수 있습니다.
using UnityEngine;
using UnityEditor;
using System.Collections;
public class Example : EditorWindow
{
void OnGUI () {
// The actual window code goes here
}
}
프로젝트 내 ‘Editor’ 폴더에 있는 MyWindow.cs
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를 사용하면 됩니다.
창의 실제 콘텐츠는 OnGUI 함수를 구현하여 렌더링됩니다. 게임 내 GUI에 사용하는 것과 동일한 UnityGUI 클래스(GUI 및 GUILayout)를 사용할 수 있습니다. 또한 에디터 전용 클래스인 EditorGUI 및 EditorGUILayout 에 일부 추가 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 페이지의 예시와 기술 자료를 참조하십시오.