UXML 格式的灵感来自 HTML、XAML 和 XML。如果您以前使用过这些格式,您会发现 UXML 中存在相似之处。但是,UXML 格式包含一些细微差异,以便提供一种有效的方式来使用 Unity。本页通过示例介绍 UXML 的格式。
以下是 UXML 文件示例。它包含几个内置的 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 词汇表 控件,提示用户做出选择
<?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
。在 UXML 声明中,encoding
属性是可选的。如果您包含 encoding
属性,则必须声明文件的字符编码。
下一行定义文档根,<UXML>
。<UXML>
元素包含命名空间前缀定义和模式定义文件位置的属性。您可以按任意顺序指定这些属性。
在 UI 工具包中,每个元素都在 UnityEngine.UIElements
或 UnityEditor.UIElements
命名空间中定义
UnityEngine.UIElements
命名空间包含作为 Unity 运行时一部分定义的元素。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 文件,请选择 资源 > 创建 > UI 工具包 > UI 文档。
注意:如果定义自己的元素,请不要在 UnityEngine.UIElements
或 UnityEditor.UIElements
命名空间中定义自定义控件类。否则,UI 构建器将隐藏您的自定义控件。
模式定义验证您的 UXML 文件。它指定每个 UXML 元素可以包含哪些属性和子元素。
在 UXML 文件中,<UXML>
根元素的 xsi:noNamespaceSchemaLocation
或 xsi:schemaLocation
属性指定模式定义文件的位置。
要创建具有最新模式定义的 UXML 文件,请选择 资源 > 创建 > UI 工具包 > UI 文档。这将创建一个在根元素中包含 xsi:noNamespaceSchemaLocation
属性的文件。
注意:如果您的文本编辑器无法识别 xsi:noNamespaceSchemaLocation
属性,请改用 xsi:schemaLocation
属性。
要强制更新 UXML 模式定义,请选择 资源 > 更新 UXML 模式。
UI 的定义位于 <UXML>
根元素内。UI 定义是一系列嵌套的 UXML 元素,每个元素代表一个视觉元素。
元素名称对应于要实例化的元素的 C# 类名。大多数元素都有属性,并且它们的属性值映射到 C# 中相应的类属性。每个元素除了继承其父类的属性之外,还具有自己的一组属性。VisualElement
是所有元素的基类,它为所有元素提供以下属性
name
:元素的标识符。名称应唯一。picking-mode
:设置为 Position
以响应鼠标事件,或设置为 Ignore
以忽略鼠标事件。focus-index
:(已弃用) 使用 tabIndex
和 focusable
。tabindex
:一个整数,定义当前元素的制表位位置。focusable
:一个布尔值,指示元素是否可聚焦。class
:一个用空格分隔的标识符列表,用于描述元素。使用类将视觉样式分配给元素。您还可以使用类在 UQuery 中选择一组元素。tooltip
:当鼠标悬停在元素上时显示为工具提示的字符串。view-data-key
:一个字符串,定义用于元素序列化的键。