Создать пользовательский редактор Windows с IMGUI
Примечание: Настоятельно рекомендуется использовать UI Toolkit для расширения Unity Editor, так как это более современное, гибкое и масштабируемое решение, чем IMGUI.
В своём приложении вы можете создать сколько угодно собственных окон. Они ведут себя так же, как Inspector, Scene и другие встроенные окна. Это отличный способ добавить интерфейс к какой-либо подсистеме вашей игры.
Создание настраиваемого Окна Редактора включает в себя следующие простые шаги:
- Создайте скрипт, производный от EditorWindow.
- Используйте код, чтобы вызвать окно, чтобы отобразить себя.
- Реализуйте код GUI для вашего инструмента.
Производное от EditorWindow
Чтобы создать своё окно редактора, скрипт должен находиться в папке с именем «Editor». Опишите в этом скрипте класс, производный от EditorWindow. Затем напишите элементы управления GUI внутри функции OnGUI.
using UnityEngine;
using UnityEditor;
using System.Collections;
public class Example : EditorWindow
{
void OnGUI () {
// The actual window code goes here
}
}
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. Вы можете использовать те же классы UnityGUI, что и для вашего игрового GUI (GUI и GUILayout). Кроме того, мы предоставляем некоторые дополнительные элементы управления GUI, расположенные в классах только для редактора EditorGUI и EditorGUILayout. Эти классы добавляют к контролям, уже доступным в обычных классах, так что вы можете смешивать и сочетать по своему усмотрению.
Следующий код C# показывает, как можно добавить элементы GUI к вашему пользовательскому EditorWindow:
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.