本节介绍由 PropertyField
支持的数据类型转换和字段。
UI 工具包中的大多数内置控件都为特定数据类型实现了 INotifyValueChanged
接口。例如,DoubleField
实现了 INotifyValueChanged<Double>
,这意味着您可以将 DoubleField
控件绑定到类型为 double
的属性。您可以使用绑定系统绑定更多数据类型。例如,您可以将类型为 int
的属性绑定到 DoubleField
。
下表列出了您可以绑定的源数据类型和目标数据类型
源数据类型 | INotifyValueChanged 的目标数据类型 |
---|---|
long |
|
int |
|
double |
|
float |
|
char |
|
注意:为防止数据丢失,请使用 PropertyField
或使用下文 PropertyField 支持的字段表 中所示的适当数据类型。
PropertyField
支持的字段当 检查器一个 Unity 窗口,显示有关当前选定 GameObject、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表 窗口填充时,如果某个类型不存在自定义编辑器,则绑定系统会调用 InspectorElement.FillDefaultInspector()
。这会为 SerializedObject
上的每个 SerializedProperty
创建一个 PropertyField
。
每个 PropertyField
在其下方都有一个匹配的控件,例如 IntegerField
用于表示 int
,或 Toggle
用于表示 bool
。如果属性具有子属性,则 PropertyField
具有一个 Foldout
控件。该 Foldout
在每个子属性下都有相应的默认控件。如果您为属性创建了自定义 PropertyDrawer
,则将使用 PropertyDrawer
的 CreatePropertyGUI()
方法返回的 视觉树一个由轻量级节点组成的对象图,包含窗口或面板中的所有元素。它定义了使用 UI 工具包构建的每个 UI。
参见 术语表。
注意:
创建自定义 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表 时,除非找不到特定控件,否则请勿使用 PropertyField
。例如,要在视觉树中创建控件并将其绑定到 Color
,请使用 ColorField
而不是 PropertyField
。这使视觉树更轻量级,操作速度更快。
使用 PropertyField
会产生额外的开销,因为它会在绑定后解析要使用的具体字段。此额外步骤可能会影响性能。但是,PropertyField
对某些用途很有用。例如,它支持自定义绘制器,您可以使用它以个性化的方式处理特定属性。这消除了猜测绘制字段类型的需要,从而减少了错误。
下表列出了 PropertyField
支持的字段及其数据类型
字段 | 数据类型 |
---|---|
BoundsField |
Bounds |
BoundsIntField |
BoundsInt |
ColorField |
Color |
CurveField |
AnimationCurve |
FloatField |
float |
GradientField |
Gradient |
Hash128Field |
Hash128 |
IntegerField |
int |
IntegerField |
int,用于 ArraySize |
LayerMaskField |
unit |
LongField |
long |
ObjectField |
UnityEngine.Object |
PopupField <string> |
Enum |
RectField |
Rect |
RectIntField |
RectInt |
TextField |
string |
TextField ,maxLength=1 |
char |
Toggle |
bool |
Vector2Field |
Vector2 |
Vector2IntField |
Vector2Int |
Vector3Field |
Vector3 |
Vector3IntField |
Vector3Int |
Vector4Field |
Vector4 |