このセクションでは PropertyField がサポートするデータ型変換とフィールドについて説明します。
UI Toolkit のほとんどのビルトインコントロールは、特定のデータ型に対して INotifyValueChanged インターフェースを実装しています。例えば、DoubleField は INotifyValueChanged<Double> を実装しています。つまり、DoubleField コントロールを double 型のプロパティにバインドできます。バインディングシステムを使用すれば、もっと多くのデータ型をバインドできるようになります。例えば、int 型のプロパティを DoubleField にバインドすることができます。
以下の表は、バインドできるソースと対象となるデータ型の一覧です。
| ソースのデータ型 | INotifyValueChanged の対象データ型 |
|---|---|
long |
|
int |
|
double |
|
float |
|
char |
|
ノート: データ損失を防ぐために、PropertyField を使用するか、または以下の PropertyField がサポートするフィールドの表に示す適切なデータ型を使用してください。
PropertyField がサポートするフィールドInspector ウィンドウにデータが入力されるときに、データ型に対してカスタムエディターが存在していない場合、バインディングシステムは InspectorElement.FillDefaultInspector() を呼び出します。これにより、SerializedObject 上の各 SerializedProperty に PropertyField が作成されます。
各 PropertyField には該当するコントロールがあります。例えば、int を表す IntegerField や、bool を表すToggleなど、一致するコントロールがあります。プロパティにサブプロパティがある場合、PropertyField には Foldout コントロールがあります。その Foldout には、各サブプロパティの下に適切なデフォルトコントロールがあります。プロパティにカスタムの PropertyDrawer を作成した場合は、PropertyDrawer の CreatePropertyGUI() メソッドから返されるビジュアルツリーが代わりに使用されます。
ノート:
カスタム UI を作成するときは、特定のコントロールが見つからない場合を除き、PropertyField を使用しないでください。例えば、ビジュアルツリーにコントロールを作成し、それを Color にバインドするには、PropertyField ではなく ColorField を使用します。これにより、ビジュアルツリーが軽量化され、操作がより早くなります。
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 |