UxmlElementAttribute
класс в UnityEngine.UIElements
Выполнено в:UnityEngine.UIElementsModule
Описание
Объявляет пользовательский контроллер.
Чтобы создать пользовательский элемент управления, добавьте к определению его класса атрибут UxmlElement. Класс нужно объявить частичным и унаследовать от VisualElement
Когда элемент помечен атрибутом UxmlElement, соответствующий класс может быть создан для каждого элемента. UxmlSerializedData
класс формируется в частичном классе. Этот класс данных содержит SerializeField для каждого поля или свойства, которое было помечено
UxmlAttributeAttribute атрибут. Эти серийизованные данные позволяют элементу быть серийизованным из UXML и поддерживают редактирование в поле Атрибуты окна Inspector в UI Builder. UxmlSerializedData включает в себя генерируемое UxmlSerializedData.CreateInstance метод, который использует конструктор по умолчанию. Вы можете использовать UxmlCreateInstanceMethodAttribute для замены поведения по умолчанию и предоставления собственного метода создания. По умолчанию пользовательский контроллер появляется на вкладке Библиотека в UI Builder. visibility поле может быть использовано для управления видимостью пользовательского контроля на вкладке Библиотека.
Для примера миграции пользовательского контроля из UxmlFactory и UxmlTraits к Генеральной Ассамблее UxmlElement и UxmlAttributes система, см. Расширенное создание пользовательских контроля с UXML.
В следующем примере создается пользовательский контроллер с несколькими атрибутами:
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>
Когда вы создаёте пользовательский элемент управления, по умолчанию в UXML и UI Builder используется имя типа элемента (имя класса C#). Однако имя можно изменить, чтобы на элемент было удобнее ссылаться.
Примечание: Вы все еще должны ссылаться на пространство имен классов в UXML. Чтобы создать пользовательское имя для элемента, укажите значение в name свойства.
Например, если создана следующая пользовательская кнопка:
using UnityEngine.UIElements;
namespace MyNamespace { [UxmlElement("MyButton")] public partial class CustomButtonElement : Button { } }
Затем вы можете сослаться на пользовательскую кнопку в UXML с пользовательским именем или типом:
<ui:UXML xmlns:ui="UnityEngine.UIElements">
<MyNamespace.MyButton />
<MyNamespace.CustomButtonElement />
</ui:UXML>
Некоторые пространства имён Unity, а именно начинающиеся с Unity, UnityEngine и UnityEditor, зарезервированы. Поэтому элементы из этих пространств имён по умолчанию скрыты в библиотеке UI Builder. Однако это поведение можно переопределить, явно настроив видимость таких элементов:
using UnityEngine.UIElements;
namespace Unity.MyGame { // This element is visible in the UI Builder library under "My Game/Inventory". [UxmlElement(libraryPath = "My Game/Inventory", visibility = LibraryVisibility.Visible)] public partial class VisibleItem : VisualElement { [UxmlAttribute] public string description { get; set; } } }
// This element is hidden from the UI Builder library. // However, you can still use it in UXML or C# code. [UxmlElement(visibility = LibraryVisibility.Hidden)] public partial class HiddenItem : VisualElement { [UxmlAttribute] public string description { get; set; } }
Свойства
| Свойство | Описание |
|---|---|
| libraryPath | Настраиваемый путь, используемый при отображении элемента в библиотеке UI Builder. Подпути могут быть созданы с помощью косынки (/). Если значение не указано, будет использовано пространство имен элемента. |
| name | Предоставляет пользовательское имя элемента. |
| visibility | Контролирует видимость элемента в библиотеке UI Builder. |
Конструкторы
| Конструктор | Описание |
|---|---|
| UxmlElementAttribute | Открывает тип VisualElement для UXML и UI Builder |