Unity3D :绑定 UXML 和 C# 脚本

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

绑定 UXML 和 C# 脚本

版本: 2021.3+

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

示例概述

本示例创建一个自定义编辑器窗口,其中包含绑定到任何游戏对象
在一个现场
.

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

先决条件

本指南适用于熟悉 Unity 编辑器的开发人员,用户界面
工具包和 C# 脚本。在开始之前,请熟悉以下内容:

  • 可视化树
  • 用户体验
  • bindingPath
  • Bind()

在 UXML 中定义绑定路径

定义视觉元素
以及 UXML 中的绑定路径。

  1. 使用任何模板在 Unity 中创建项目。
  2. 在你的项目窗口
    ,创建一个名为文件夹的文件夹来存储所有文件。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()

  1. 创建一个名为 的文件夹。Editor
  2. 编辑器文件夹中,创建名为 的 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;
                }
            }
        }
    }
}

4.  在“项目”窗口中,选择并拖动到SimpleBindingExampleUXML.csbinding_example.uxml检查员
.

测试绑定

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

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D :在没有绑定路径的情况下绑定 (mvrlink.com)

下一篇:Unity3D :使用检查器创建绑定 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号