UXML 格式的灵感来自 HTML、XAML 和 XML。如果您以前使用过这些格式,会发现与 UXML 的相似之处。但是,UXML 格式包含一些小差异,旨在与 Unity 高效融合。本页面通过示例介绍 UXML 的格式。
以下是 UXML 文件示例:它包含几个内置__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary 控件,可提示用户做出选择:
<?xml version="1.0" encoding="utf-8"?>
<UXML ...>
<Box>
<Toggle name="boots" label="Boots" value="false" />
<Toggle name="helmet" label="Helmet" value="false" />
<Toggle name="cloak" label="Cloak of invisibility" value="false"/>
</Box>
<Box>
<Button name="cancel" text="Cancel" />
<Button name="ok" text="OK" />
</Box>
</UXML>
以上 UXML 示例中的第一行代码是 UXML 声明。此声明为可选项。如果包含 UXML 声明,则必须将其放在第一行。UXML 声明需要 version。encoding 属性在 UXML 声明中是可选的。如果包含 encoding 属性,则必须声明文件的字符编码。
下一行定义文档根 <UXML>。<UXML> 元素包含命名空间前缀定义的属性和架构定义文件的位置。可以按任意顺序指定这些属性。
在 UI 工具包中,每个元素都在 UnityEngine.UIElements 或 UnityEditor.UIElements 命名空间中定义:
UnityEngine.UIElements 命名空间包含被定义为 Unity Runtime 一部分的元素。UnityEditor.UIElements 命名空间包含 Unity 编辑器中可用的元素。要完整指定一个元素,必须在其前面添加其命名空间。例如,如果要在 UXML 模板中使用 Button 元素,则必须指定 <UnityEngine.UIElements:Button />。
要方便指定命名空间,可以定义命名空间前缀。例如,xmlns:engine="UnityEngine.UIElements" 将 engine 前缀定义为 UnityEngine.UIElements。定义命名空间前缀之后,可以将其用于指定命名空间。例如,<engine:Button /> 等同于 <UnityEngine.UIElements:Button />
还可以通过排除前缀来定义默认命名空间。例如,xmlns="UnityEngine.UIElements" 将 UnityEngine.UIElements 定义为默认命名空间。这意味着,例如,指定 <Button /> 等同于 <UnityEngine.UIElements:Button />
要创建具有自动定义命名空间的 UXML 文件,请选择资源 (Asset) > 创建 (Create) > UI 工具包 ** (UI Toolkit) > UI 文档** (UI Document)。
注意:如果定义自己的元素,请不要在 UnityEngine.UIElements 或 UnityEditor.UIElements 命名空间中定义自定义控件类。否则,UI Builder 将隐藏您的自定义控件。
架构定义会验证 UXML 文件。它指定每个 UXML 元素可以包含的属性和子元素。
在 UXML 文件中,<UXML> 根元素的 xsi:noNamespaceSchemaLocation 或 xsi:schemaLocation 属性指定架构定义文件的位置。
要创建具有最新架构定义的 UXML 文件,请选择资源 (Assets) > 创建 (Create) > UI 工具包 (UI Toolkit) > UI 文档 (UI Document)。这样会创建一个具有根元素 xsi:noNamespaceSchemaLocation 属性的文件。
注意:如果您的文本编辑器无法识别 xsi:noNamespaceSchemaLocation 属性,请改用 xsi:schemaLocation 属性。
要强制更新 UXML 架构定义,请选择资源 (Assets) > 更新 UXML 架构 (Update UXML Schema)。
UI 的定义在 <UXML> 根中。UI 定义是一系列嵌套的 UXML 元素,每个元素代表一个视觉元素。
元素名称对应于要实例化的元素的 C# 类名。大多数元素都有属性,且属性的值映射到 C# 中相应的类属性。每个元素除了继承自父类的属性外,还有自己的一组属性。VisualElement 是所有元素的基类,它为所有元素提供以下属性:
name:元素的标识符。名称应具有唯一性。picking-mode:设置为 Position(响应鼠标事件)或 Ignore(忽略鼠标事件)。focus-index:(已弃用)使用 tabIndex 和 focusable。tabindex:一个整数,定义当前元素的 Tab 键移动位置。focusable:一个布尔值,指示是否可聚焦该元素。class:用于表征元素的标识符的空格分隔列表。使用类为元素指定视觉样式。还可以使用类在 UQuery 中选择一组元素。tooltip:鼠标悬停在元素上方时显示为工具提示的字符串。view-data-key:一个字符串,可定义用于元素序列化的键。