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建模学习工作室整理翻译,转载请注明出处!