Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

Привязка к скриптам UXML и C#

Версия: 2021.3+

В этом примере показано, как создать привязку и установить путь привязки с помощью UXML, а затем вызвать метод Bind() с помощью скрипта C#.

Примерный обзор

В этом примере создается пользовательское окно Редактора с TextField, которое связывается со свойством name любого GameObject в сцене.

Отображает окно Unity Editor с пользовательским полем для изменения имени GameObject.
Отображает окно Unity Editor с пользовательским полем для изменения имени GameObject.

Вы можете найти завершенные файлы, созданные этим примером, в хранилище GitHub.

Предварительные условия

Это руководство предназначено для разработчиков, знакомых со скриптами Unity Editor, UI Toolkit и C#. Перед началом работы ознакомьтесь со следующим:

Определить путь привязки в UXML

Определить визуальные элементы и путь привязки в UXML.

  1. Создайте проект в Unity с любым шаблоном.

  2. В окне Project создайте папку bind-with-uxml-csharp для хранения всех ваших файлов.

  3. Создайте документ 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().

  1. Создайте папку под названием Editor.

  2. В папке Редактор создайте файл скрипта C# с именем SimpleBindingExampleUXML.cs.

  3. Заменить содержимое 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;
                    }
                }
            }
        }
    }
    
  4. В течение Project окно, выбрать SimpleBindingExampleUXML.cs и перетащите binding_example.uxml к Генеральной Ассамблее Визуальное дерево в области Inspector.

Проверка привязки

  1. В Unity выберите Окно > UIToolkitExamples > Simple Binding Example UXML. Появится окно Редактора с текстовым полем.
  2. Выберите любой GameObject в вашей сцене. Имя GameObject появится в текстовом поле окна редактора.
  3. Если вы измените имя GameObject в текстовом поле, то изменится и имя GameObject.

Дополнительные ресурсы