声明自定义控件。
要创建自定义控件,您必须将 UxmlElement 属性添加到自定义控件类定义中。您必须将自定义控件类声明为部分类,并继承自 VisualElement 或其派生类之一。当元素用 UxmlElement 属性标记时,会在部分类中生成相应的 UxmlSerializedData 类。此数据类包含每个用 UxmlAttributeAttribute 属性标记的字段或属性的 SerializeField。此序列化数据允许从 UXML 序列化元素,并支持在 UI Builder 的 Inspector 窗口的 Attributes 字段中进行编辑。默认情况下,自定义控件会显示在 UI Builder 的 Library 选项卡中。要将其从 Library 选项卡中隐藏,请提供 HideInInspector 属性。
以下示例创建了一个具有多个属性的自定义控件
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements;
[UxmlElement] public partial class ExampleVisualElement : VisualElement { [UxmlAttribute] public string myStringValue { get; set; }
[UxmlAttribute] public int myIntValue { get; set; }
[UxmlAttribute] public float myFloatValue { get; set; }
[UxmlAttribute] public List<int> myListOfInts { get; set; }
[UxmlAttribute, UxmlTypeReference(typeof(VisualElement))] public Type myType { get; set; }
[UxmlAttribute] public Texture2D myTexture { get; set; }
[UxmlAttribute] public Color myColor { get; set; } }
以下 UXML 文档使用了自定义控件
<ui:UXML xmlns:ui="UnityEngine.UIElements"> <ExampleElement my-string-value="Hello World" my-int-value="123" /> <ExampleElement my-float-value="3.14" my-list-of-ints="1,2,3" /> <ExampleElement my-string-value="Hello World" my-int-value="123" /> <ExampleElement my-texture="project://database/Assets/MyTexture.png" /> <ExampleElement my-color="#FF0000FF" /> <ExampleElement my-type="UnityEngine.UIElements.Button, UnityEngine.UIElementsModule" /> </ui:UXML>
<para>创建自定义控件时,在 UXML 和 UI Builder 中使用的默认名称是元素类型名称(C# 类名)。但是,您可以自定义名称以方便引用元素。</para> <para>注意:您仍然需要在 UXML 中引用类的命名空间。</para> <para>要为元素创建自定义名称,请为 name
属性提供一个值。例如,如果您创建了以下自定义按钮:</para>
using UnityEngine.UIElements;
[UxmlElement("MyButton")] public partial class CustomButtonElement : Button { }
然后,您可以使用自定义名称或其类型在 UXML 中引用自定义按钮
<ui:UXML xmlns:ui="UnityEngine.UIElements"> <MyButton /> <CustomButtonElement /> </ui:UXML>
name | 为元素提供自定义名称。 |
UxmlElementAttribute | 将 VisualElement 的类型公开给 UXML 和 UI Builder |