版本: 2021.3+
此示例演示如何使用 UXML 创建绑定并设置绑定路径,以及如何使用 C# 脚本调用 Bind()
方法。
此示例创建一个自定义编辑器窗口,其中包含一个绑定到任何 游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路径点等。游戏对象的功 能由附加到它的组件定义。 更多信息
参见 术语表 的名称属性的文本字段,该游戏对象位于 场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中, 您放置环境、障碍物和装饰,本质上是分段设计和构建游戏。 更多信息
参见 术语表 中。
您可以在此 GitHub 存储库 中找到此示例创建的完整文件。
本指南适用于熟悉 Unity 编辑器、UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容
bindingPath
Bind()
在 UXML 中定义 视觉元素视觉树的一个节点,它实例化或派生自 C# VisualElement
类。您可以设置外观样式、定义行为并在屏幕上将其显示为 UI 的一部分。 更多信息
参见 术语表 和绑定路径。
在 Unity 中使用任何模板创建一个项目。
在您的 项目窗口显示 Assets
文件夹内容的窗口(项目选项卡) 更多信息
参见 术语表 中,创建一个名为 bind-with-uxml-csharp
的文件夹以存储所有文件。
创建一个名为 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# 脚本中创建绑定,并显式调用 Bind()
方法。
创建一个名为 Editor
的文件夹。
在 Editor 文件夹中,创建一个名为 SimpleBindingExampleUXML.cs
的 C# 脚本文件。
将 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;
}
}
}
}
}
在项目窗口中,选择 SimpleBindingExampleUXML.cs
,并将 binding_example.uxml
拖动到 Inspector一个 Unity 窗口,显示有关当前选定游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表 中的 视觉树 字段。