Привязка к скриптам UXML и C#
Версия: 2021.3+
В этом примере показано, как создать привязку и установить путь привязки с помощью UXML, а затем вызвать метод Bind() с помощью скрипта C#.
Примерный обзор
В этом примере создается пользовательское окно Редактора с TextField, которое связывается со свойством name любого GameObject в сцене.
Вы можете найти завершенные файлы, созданные этим примером, в хранилище GitHub.
Предварительные условия
Это руководство предназначено для разработчиков, знакомых со скриптами Unity Editor, UI Toolkit и C#. Перед началом работы ознакомьтесь со следующим:
Определить путь привязки в UXML
Определить визуальные элементы и путь привязки в UXML.
Создайте проект в Unity с любым шаблоном.
В окне Project создайте папку
bind-with-uxml-csharpдля хранения всех ваших файлов.-
Создайте документ UI с именем
binding_example.uxmlи замените его содержимое следующим:<UXML xmlns:ui="UnityEngine.UIElements"> <ui:VisualElement name="top-element"> <ui:Label name="top-label" text="UXML-Defined Simple Binding"/> <ui:TextField name="GameObjectName" label="Name" text="" binding-path="m_Name"/> </ui:VisualElement> </UXML>
Создать привязку в C#
Создайте привязку в скрипте C# и сделайте явный вызов метода Bind().
Создайте папку под названием
Editor.В папке Редактор создайте файл скрипта C# с именем
SimpleBindingExampleUXML.cs.-
Заменить содержимое
SimpleBindingExampleUXML.csследующим текстом:using UnityEditor; using UnityEngine; using UnityEditor.UIElements; using UnityEngine.UIElements; namespace UIToolkitExamples { public class SimpleBindingExampleUXML : EditorWindow { [SerializeField] VisualTreeAsset visualTree; [MenuItem("Window/UIToolkitExamples/Simple Binding Example UXML")] public static void ShowDefaultWindow() { var wnd = GetWindow<SimpleBindingExampleUXML>(); wnd.titleContent = new GUIContent("Simple Binding UXML"); } public void CreateGUI() { visualTree.CloneTree(rootVisualElement); OnSelectionChange(); } public void OnSelectionChange() { GameObject selectedObject = Selection.activeObject as GameObject; if (selectedObject != null) { // Create the SerializedObject from the current selection SerializedObject so = new SerializedObject(selectedObject); // Bind it to the root of the hierarchy. It will find the right object to bind to. rootVisualElement.Bind(so); } else { // Unbind the object from the actual visual element rootVisualElement.Unbind(); // Clear the TextField after the binding is removed var textField = rootVisualElement.Q<TextField>("GameObjectName"); if (textField != null) { textField.value = string.Empty; } } } } } В течение Project окно, выбрать
SimpleBindingExampleUXML.csи перетащитеbinding_example.uxmlк Генеральной Ассамблее Визуальное дерево в области Inspector.
Проверка привязки
- В Unity выберите Окно > UIToolkitExamples > Simple Binding Example UXML. Появится окно Редактора с текстовым полем.
- Выберите любой GameObject в вашей сцене. Имя GameObject появится в текстовом поле окна редактора.
- Если вы измените имя GameObject в текстовом поле, то изменится и имя GameObject.