Привязываемые типы данных и поля
В этом разделе описываются преобразования типов данных и поля, поддерживаемые PropertyField.
Преобразование типов данных
Большинство встроенных контроллеров в UI Toolkit реализуют INotifyValueChanged интерфейс для конкретного типа данных. Например, DoubleField инструменты INotifyValueChanged<Double>, что означает, что вы можете связать DoubleField управления к свойству типа double. Вы можете связать больше типов данных с системой привязки. Например, вы можете связать свойство типа int к а DoubleField.
В следующей таблице перечислены типы исходных и конечных данных, которые можно связать.
| Тип источника данных | Целевой тип данных INotifyValueChanged |
|---|---|
long |
|
int |
|
double |
|
float |
|
char |
|
Примечание: Для предотвращения потери данных используйте PropertyField или используйте соответствующие типы данных, как показано в Полях, поддерживаемых PropertyField таблице ниже.
Поля, поддерживаемые PropertyField
При заполнении окна Inspector, если пользовательский Редактор не существует для типа, система привязки вызывает InspectorElement.FillDefaultInspector(). Это создает PropertyField для каждого SerializedProperty на SerializedObject.
Каждый PropertyField имеет под собой соответствующий элемент управления, например IntegerField для представления int, или а Toggle для представления bool. Если свойство имеет подсвойства, PropertyField имеет Foldout контроля. Foldout имеет соответствующие элементы управления по умолчанию в каждом подсвойстве. Если вы создали настраиваемый PropertyDrawer для Свойства, визуальное дерево возвращается из PropertyDrawer’s CreatePropertyGUI() метод используется вместо этого.
Примечание:
При создании пользовательского UI не используйте PropertyField, если только вы не можете найти для него конкретный контроллер. Например, для создания контроллера в вашем визуальном дереве и привязки его к Color, используйте ColorField вместо PropertyField. Это делает визуальные деревья легче и операции быстрее.
Использование PropertyField приводит к дополнительным накладным расходам, поскольку оно разрешает конкретное поле, которое будет использоваться после привязки. Этот дополнительный шаг может повлиять на производительность. Однако PropertyField полезна для некоторых применений. Например, она поддерживает пользовательские ящики, которые можно использовать для обработки определенных свойств персонализированным образом. Это устраняет необходимость угадывать тип поля для рисования, что может снизить ошибки.
В следующей таблице перечислены поля, поддерживаемые PropertyField, и их типы данных:
| Полевая | Тип данных |
|---|---|
BoundsField |
Границы |
BoundsIntField |
BoundsInt |
ColorField |
Цвет |
CurveField |
AnimationCurve |
FloatField |
поплавок |
GradientField |
Градиент |
Hash128Field |
Hash128 |
IntegerField |
инт |
IntegerField |
int, для ArraySize |
LayerMaskField |
единица |
LongField |
длинный |
ObjectField |
UnityEngine.Object |
PopupField<строка> |
Энум |
RectField |
Прямая |
RectIntField |
RectInt |
TextField |
строка |
TextFieldс maxLength=1 |
символ |
Toggle |
логическое |
Vector2Field |
Vector2 |
Vector2IntField |
Vector2Int |
Vector3Field |
Vector3 |
Vector3IntField |
Vector3Int |
Vector4Field |
Vector4 |