Unity3D :使用自定义 (C#) 元素
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
使用自定义 (C#) 元素
自定义 C# 元素是一种直接在 UI 代码中嵌入复杂的 UI 相关功能的方法。例如,获取控件。这是一个单个自定义 C# 元素,在 UXML 和 UI 生成器中的外观和行为类似于单个元素,但在内部,它会创建管理用户输入、数据验证和数据绑定的元素层次结构。IntegerField
可以通过从类继承在 C# 中创建新的自定义 C# 元素。这将允许你在 C# 中创建和使用此元素,但不会在 UXML 和 UI 生成器中自动公开它。要在 UXML 和 UI 生成器中公开新的元素类型,您需要定义 ,如下所示:VisualElementUxmlFactory
class MyElement : VisualElement
{
public new class UxmlFactory : UxmlFactory<MyElement, UxmlTraits> { }
}
将 添加到类后,您将能够通过标记在 UXML 中创建元素,并在 UI 生成器的库中的“项目”选项卡下的“自定义控件 (C#)”部分中找到它。如果您的类位于命名空间中,则将创建进一步的分类。UxmlFactory<MyElement>
您可以公开其他自定义 UXML 属性,如下所示:
class MyElement : VisualElement
{
public new class UxmlFactory : UxmlFactory<MyElement, UxmlTraits> { }
public new class UxmlTraits : VisualElement.UxmlTraits
{
UxmlStringAttributeDescription m_String =
new UxmlStringAttributeDescription { name = "string-attr", defaultValue = "default_value" };
UxmlIntAttributeDescription m_Int =
new UxmlIntAttributeDescription { name = "int-attr", defaultValue = 2 };
public override IEnumerable<UxmlChildElementDescription> uxmlChildElementsDescription
{
get { yield break; }
}
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)
{
base.Init(ve, bag, cc);
var ate = ve as MyElement;
ate.stringAttr = m_String.GetValueFromBag(bag, cc);
ate.intAttr = m_Int.GetValueFromBag(bag, cc);
}
}
public string stringAttr { get; set; }
public int intAttr { get; set; }
}
UI 生成器在纯 UXML 属性正常工作所需的要求之上添加了一个额外的要求。UI 生成器要求元素类公开与在 中设置的名称同名的 C# 属性,但 C# 属性名称需要使用 代替短划线。例如,如果 UXML 属性命名为 ,则 C# 属性名称应为 。这是因为 UI 生成器依赖于这些 C# 属性来读取 C# 属性的值以填充其“检查器”窗格。{ get; set; }Uxml*AttributeDescriptioncamelCasingmy-intmyInt
以下是“检查器”窗格中显示的上述自定义属性:
UI 生成器当前不支持自定义 C# 元素的自定义检查器。
由3D建模学习工作室整理翻译,转载请注明出处!