Unity 6.3
0 онлайн 101 гостей 3 в системе
Вход
UI системы Шаг 314 из 317

Создать пользовательский редактор Windows с IMGUI

Примечание: Настоятельно рекомендуется использовать UI Toolkit для расширения Unity Editor, так как это более современное, гибкое и масштабируемое решение, чем IMGUI.

В своём приложении вы можете создать сколько угодно собственных окон. Они ведут себя так же, как Inspector, Scene и другие встроенные окна. Это отличный способ добавить интерфейс к какой-либо подсистеме вашей игры.

Интерфейс пользовательского редактора от Serious Games Interactive, используемый для написания скриптов действий в сценах
Интерфейс пользовательского редактора от Serious Games Interactive, используемый для написания скриптов действий в сценах

Создание настраиваемого Окна Редактора включает в себя следующие простые шаги:

  • Создайте скрипт, производный от 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.