Начало работы с runtime UI
Вы можете создать время выполнения UI и отобразить его в игровом окне, выполнив следующие действия:
- Создать UI Документ (
.uxml) с элементами управления. - Добавить UIDocument GameObject в сцену и добавить файл UXML в качестве исходного ассета для него.
- Создайте
MonoBehavioursдля определения поведения ваших UI контроллеров. - (необязательно) Настройте систему событий времени выполнения.
Чтобы начать, попробуйте следующий простой пример времени выполнения UI. В этом примере в сцену добавляется метка, кнопка, переключатель и текстовое поле. Когда вы нажимаете на кнопку, в окне Консоли отображается сообщение. Когда вы выбираете переключатель и нажимаете на кнопку, в окне Консоли отображается количество нажатий на кнопки. Когда вы вводите текстовое сообщение в текстовое поле, в окне Консоли отображается сообщение.
Предварительные условия
Это руководство предназначено для разработчиков, знакомых со скриптами Unity Editor, UI Toolkit и C#. Перед началом работы ознакомьтесь со следующим:
Вы можете найти завершенные файлы, созданные этим примером, в хранилище GitHub.
Создать документ UI с элементами управления
Создайте документ UI с меткой, кнопкой и переключателем. Информацию о том, как добавить элементы управления UI с UI Builder или UXML, см. в Начало работы с UI Toolkit.
Создайте проект в Unity Editor с любым шаблоном.
-
Создайте документ UI с именем
SimpleRuntimeUI.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="False"> <ui:VisualElement style="flex-grow: 1;"> <ui:Label text="This is a Label" display-tooltip-when-elided="true"/> <ui:Button text="This is a Button" display-tooltip-when-elided="true" name="button"/> <ui:Toggle label="Display the counter?" name="toggle"/> <ui:TextField picking-mode="Ignore" label="Text Field" text="filler text" name="input-message" /> </ui:VisualElement> </ui:UXML>
Настройка сцены
Создайте UIDocument GameObject в SampleScene и добавьте UI Документ в качестве исходного ассета.
-
В SampleScene, выберите GameObject > UI Toolkit > UI Документ. Это создает следующее:
- Папка UI Toolkit с ассетом Panel Settings и темой по умолчанию для времени выполнения.
- GameObject с прикрепленным компонентом Документ UI и компонент Документ UI подключены к ассету Настройки панели.
Выберите UIDocument GameObject в иерархии и перетащите SimpleRuntimeUI.uxml из окна Project в поле Source Asset компонента UI Document в окне Inspector. Это ссылается на исходный ассет в созданном вами файле UXML.
Определение поведения ваших UI контроллеров
Чтобы добавить логику, создайте скрипт C#, который производится из скрипта MonoBehaviour для доступа к элементам управления, на которые ссылается компонент документа UI.
Unity грузов a/ UI Источник компонента документа UXML когда OnEnable Чтобы убедиться, что визуальное дерево загружается правильно, добавьте логику для взаимодействия с элементами управления внутри компонента. OnEnable метод.
-
Создайте скрипт C# с именем
SimpleRuntimeUI.csсо следующим содержанием:using UnityEngine; using UnityEngine.UIElements; public class SimpleRuntimeUI : MonoBehaviour { private Button _button; private Toggle _toggle; private int _clickCount; //Add logic that interacts with the UI controls in the `OnEnable` methods private void OnEnable() { // The UXML is already instantiated by the UIDocument component var uiDocument = GetComponent<UIDocument>(); _button = uiDocument.rootVisualElement.Q("button") as Button; _toggle = uiDocument.rootVisualElement.Q("toggle") as Toggle; _button.RegisterCallback<ClickEvent>(PrintClickMessage); var _inputFields = uiDocument.rootVisualElement.Q("input-message"); _inputFields.RegisterCallback<ChangeEvent<string>>(InputMessage); } private void OnDisable() { _button.UnregisterCallback<ClickEvent>(PrintClickMessage); } private void PrintClickMessage(ClickEvent evt) { ++_clickCount; Debug.Log($"{"button"} was clicked!" + (_toggle.value ? " Count: " + _clickCount : "")); } public static void InputMessage(ChangeEvent<string> evt) { Debug.Log($"{evt.newValue} -> {evt.target}"); } } Добавить SimpleRuntimeUI.cs в качестве компонента UIDocument GameObject.
Настройка системы событий времени выполнения
В зависимости от того, выбран ли в настройках проекта активный режим обработки ввода, и хотите ли вы смешивать панели UI Toolkit с холстами uGUI, существует ряд доступных опций для изменения того, как UI Toolkit обрабатывает ввод для генерирования событий времени выполнения.
Дополнительные сведения см. в Система событий времени выполнения.