Без окон в Unity, конечно, не обойтись - не все же вешается на игровые объекты. И как прекрасно, что не всё.
Окна представлены в Unity классом EditorWindow, однако один класс сочетает в себе огромное количество возможных вариантов.
Итак, уже чуть ли не традицией, публикую тело класса:
using UnityEditor; public class MyWindow : EditorWindow { [MenuItem("Window/My Window")] public static void Open() { GetWindow<MyWindow>(true, "Window Title", true); } public void OnGUI() { } }
Обязательное условие всего одно - пронаследоваться от класса EditorWindow.
Для рисования внутри класса нужно создать метод void OnGUI() в котором можно рисовать любым из GUI-классов.
В качестве варианта открытия окна я использовал метод с атрибутом [MenuItem(<Путь в меню>)].
Как несложно догадаться данный атрибут добавляет пункт в меню. Условия его использования - обязательно статический метод и обязательно без параметров.
Внутри функции можно увидеть один из вариантов вызова - GetWindow<MyWindow>(true, "Window Title", true).
Однако, способов вызвать окно немаленькое количество.
Вызвать как обычную вкладку
Окно будет выглядеть как и большинство других окон в Unity, его можно будет подстраивать к краям экрана и тому подобное.
GetWindow<TWindow>();
Вызвать как окно утилит
Окно - прямоугольное, самостоятельное, с кнопкой закрытия
GetWindow<TWindow>(true);
Вызвать как Aux
Тоже самое, что и окно утилит, но закрывается при любом щелчке вне окна.
var window = CreateInstance<TWindow>(); window.ShowAuxWindow(new Rect(), new Vector2());
Вызвать как Popup
Окно не будет иметь рамки и его невозможно закрыть иначе, чем через команду Close() в коде.
var window = CreateInstance<TWindow>(); window.position = new Rect(); window.ShowPopup();
Вызвать как DropDown
Тоже самое, что и Popup, но закрывается при любом щелчке вне окна. Обычно используют, когда хотят сделать списки в других окнах, и прочие подобные вещи. Увы и ах - требует указания абсолютных позиций относительно экрана, так что придется попотеть, чтобы посчитать место появления.
var window = CreateInstance<TWindow>(); window.ShowAsDropDown(new Rect(), new Vector2());
Все что вам нужно сделать, в итоге - это выбрать тип окна, и начать рисовать что пожелаете в методе OnGUI()
Смотрите также:
Комментарии
Здесь еще никто не оставил комментарий
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]