版本:Unity 6 (6000.0)
语言:English
无需绑定路径进行绑定
使用 Inspector 创建绑定

使用 UXML 和 C# 脚本进行绑定

版本: 2021.3+

此示例演示如何使用 UXML 创建绑定并设置绑定路径,以及如何使用 C# 脚本调用 Bind() 方法。

示例概述

此示例创建一个自定义编辑器窗口,其中包含一个绑定到任何 游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路径点等。游戏对象的功 能由附加到它的组件定义。 更多信息
参见 术语表
的名称属性的文本字段,该游戏对象位于 场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中, 您放置环境、障碍物和装饰,本质上是分段设计和构建游戏。 更多信息
参见 术语表
中。

您可以在此 GitHub 存储库 中找到此示例创建的完整文件。

先决条件

本指南适用于熟悉 Unity 编辑器、UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表
工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容

在 UXML 中定义绑定路径

在 UXML 中定义 视觉元素视觉树的一个节点,它实例化或派生自 C# VisualElement 类。您可以设置外观样式、定义行为并在屏幕上将其显示为 UI 的一部分。 更多信息
参见 术语表
和绑定路径。

  1. 在 Unity 中使用任何模板创建一个项目。

  2. 在您的 项目窗口显示 Assets 文件夹内容的窗口(项目选项卡) 更多信息
    参见 术语表
    中,创建一个名为 bind-with-uxml-csharp 的文件夹以存储所有文件。

  3. 创建一个名为 binding_example.uxml 的 UI 文档,并将其内容替换为以下内容

    <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. Editor 文件夹中,创建一个名为 SimpleBindingExampleUXML.cs 的 C# 脚本文件。

  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. 在项目窗口中,选择 SimpleBindingExampleUXML.cs,并将 binding_example.uxml 拖动到 Inspector一个 Unity 窗口,显示有关当前选定游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
    参见 术语表
    中的 视觉树 字段。

测试绑定

  1. 在 Unity 中,选择 窗口 > UIToolkitExamples > 简单绑定示例 UXML。将出现一个带有文本字段的自定义编辑器窗口。
  2. 在您的场景中选择任何游戏对象。游戏对象的名称将显示在您的编辑器窗口的文本字段中。
  3. 如果在文本字段中更改游戏对象的名称,则游戏对象的名称也会发生更改。

其他资源

无需绑定路径进行绑定
使用 Inspector 创建绑定