Создание всплывающего окна
В этом примере показано, как использовать UnityEditor.PopupWindow для создания всплывающего окна.
Примерный обзор
Этот пример создает всплывающее окно, которое отображается через кнопку в окне пользовательского редактора. Всплывающее окно имеет три переключателя и закрывается, когда оно не находится в фокусе.
Вы можете найти завершенные файлы, созданные этим примером, в хранилище GitHub.
Предварительные условия
Это руководство предназначено для разработчиков, знакомых со скриптами Unity Editor, UI Toolkit и C#. Перед началом работы ознакомьтесь со следующим:
Создание настраиваемого окна редактора
Создайте пользовательское окно Редактора с кнопкой. Определите кнопку в Документе UI (файл UXML) и стилизируйте ее в файле USS. Наконец, определите логику кнопки в скрипте C# так, чтобы при нажатии на кнопку открывалось всплывающее окно.
Создайте проект Unity с любым шаблоном.
В окне Projectперейдите в папку
Assetsи создайте в ней папкуEditor.Щелкните правой кнопкой мыши в папке
Editorи выберите Создать > UI Toolkit > Окно редактора.Включите параметры UXML и USS в окне UI Toolkit Создатель Окна Редактора.
Введите
PopupExampleв поле C#.Выберите Подтвердите. Это создаст три файла:
PopupExample.cs,PopupExample.uxmlиPopupExample.uss.-
Заменить
PopupExample.uxmlследующим текстом:<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True"> <Style src="PopupExample.uss" /> <ui:Button text="Popup Options" display-tooltip-when-elided="true" class="popup-button" /> </ui:UXML> -
Заменить
PopupExample.csследующим текстом:using UnityEditor; using UnityEngine.UIElements; using PopupWindow = UnityEditor.PopupWindow; public class PopupExample : EditorWindow { //Add menu item [MenuItem("Examples/Popup Example")] static void Init() { EditorWindow window = EditorWindow.CreateInstance<PopupExample>(); window.Show(); } private void CreateGUI() { var visualTreeAsset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/PopupExample.uxml"); visualTreeAsset.CloneTree(rootVisualElement); var button = rootVisualElement.Q<Button>(); button.clicked += () => PopupWindow.Show(button.worldBound, new PopupContentExample()); } } -
Заменить
PopupExample.ussследующим текстом:.popup-button { width: 200px; }
Создание содержимого всплывающего окна
Создайте UI Document (файл UXML), задающий содержимое всплывающего окна. Создайте класс C#, чтобы задать размер окна и отобразить его.
-
В папке
Editorсоздайте Документ UI с именемPopupWindowContent.uxmlсо следующим содержанием:<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True"> <ui:Toggle label="Toggle 1" name="Toggle1"/> <ui:Toggle label="Toggle 2" /> <ui:Toggle label="Toggle 3" /> </ui:UXML> -
В папке
Editorсоздайте файл C# с именемPopupContentExample.csсо следующим содержимым:using UnityEditor; using UnityEngine; using UnityEngine.UIElements; public class PopupContentExample : PopupWindowContent { public override void OnOpen() { Debug.Log("Popup opened: " + this); } public override VisualElement CreateGUI() { var visualTreeAsset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/PopupWindowContent.uxml"); return visualTreeAsset.CloneTree(); } public override void OnClose() { Debug.Log("Popup closed: " + this); } } Чтобы проверить всплывающее окно, в меню выберите Примеры > Пример всплывающего окна, чтобы открыть окно Редактора. Затем выберите Настройки всплывающего окна в окне, чтобы отобразить всплывающее окно.