Unity3D :自定义 UXML 标记名称和属性

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

自定义 UXML 标记名称和属性

可以自定义 UXML 标记名称、重写基类属性的默认值或限制自定义控件的接受属性。

自定义 UXML 标签名称

默认情况下,自定义控件的 UXML 中的标记名称是 C# 类名称。不建议标记的名称与 C# 类的名称不同。但是,如果存在名称冲突,您可以自定义标记名称。

要自定义 UXML 标记名称,请覆盖其 和 属性。确保以下几点:IUxmlFactory.uxmlNameIUXmlFactory.uxmlQualifiedName

  • uxmlName在您的命名空间中是唯一的
  • uxmlQualifiedName在您的项目中独一无二

如果两个名称都不唯一,Unity 会在加载程序集时引发异常。

下面的代码示例重写并自定义 UXML 标记名称:

public class FactoryWithCustomName : UxmlFactory<..., ...>
{
    public override string uxmlName
    {
        get { return "UniqueName"; }
    }

    public override string uxmlQualifiedName
    {
        get { return uxmlNamespace + "." + uxmlName; }
    }
}

为元素选择工厂

默认情况下,实例化一个元素,并按元素的名称选择该元素。要考虑所选元素的属性值,请覆盖 。工厂检查元素属性,以确定它是否可以实例化 UXML 元素的对象。IUxmlFactoryIUXmlFactory.AcceptsAttributeBag()

如果您的类是泛型的,则让工厂检查元素属性会很有用。在这种情况下,类专用化的类工厂可以检查 UXML 属性的值。根据值,可以接受或拒绝实例化。VisualElementtype

如果多个工厂可以实例化一个元素,则选择第一个注册的工厂。

重写基类属性的默认值

若要更改在基类中声明的属性的默认值,请在派生类中设置该属性。defaultValueUxmlTraits

下面的代码示例更改默认值 :m_TabIndex

class MyElementTraits : VisualElement.UxmlTraits
    {
        public MyElementTraits()
        {
            m_TabIndex.defaultValue = 0;
        }
    }

限制接受的属性

默认情况下,生成的 UXML 架构声明元素可以具有任何属性。这与检查声明属性的值是否与其声明匹配的 XML 验证程序相反。

包包括传递给 和 函数的其他属性。工厂实现决定是否使用这些附加属性。默认行为是放弃其他属性。这些附加属性不会附加到实例化的属性,并且无法使用 UQuery 查询这些属性。IUxmlAttributesIUxmlFactory.AcceptsAttributeBag()IUxmlFactory.Init()VisualElement

若要在定义新元素时将接受的属性限制为包中显式声明的属性,请在构造函数中将该属性设置为 。IUxmlAttributesUxmlTraits.canHaveAnyAttributefalseUxmlTraits

其他资源

  • 创建自定义控件
  • 向 UXML 和 UI 生成器公开自定义控件

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

上一篇:Unity3D :向 UXML 和 UI 生成器公开自定义控件 (mvrlink.com)

下一篇:Unity3D :管理元素的最佳做法 (mvrlink.com)

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