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

上一篇:Unity3D :构建 UXML 属性 (mvrlink.com)

下一篇:Unity3D :视觉元素和可视化树简介 (mvrlink.com)

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