Version: 2021.3
言語: 日本語
バインド可能なデータ型とフィールド
バインディングの例

バインディングシステム実装の詳細

UI Toolkit のバインディングシステムが実装レベルでどのように機能するかについて、以下に説明します。

バインディングの作成

Bind() メソッドを呼び出すと、最初の値を非同期で同期し、追跡します。つまり、フィールドの value プロパティがすぐに更新できないことを意味します。これにより、まだどの UI にも加えられていない階層にバインディングを設定することができます。

変更の検出

バインディングシステムは、Unity オブジェクトのシリアル化されたデータに依存して変更検知を実装します。

SerializedObject と 1 つ以上の要素との間にバインディングを作成した後、システムはこのオブジェクトに変更がないか、毎フレームではありませんが一定の間隔でポーリングします。以下の 2 つのステップで行われます。

  1. システムは、ネイティブコードで SerializedObject をシリアル化しポーリングして、シリアル化されたバイトの変更を検出します。変更がない場合停止します。
  2. 変更があった場合、システムはバインドされている要素のプロパティと表示値を比較します。必要であれば、表示される値を更新します。これは、指定されたオブジェクトの特定のプロパティと要素のバインディングごとに行われます。

操作スロットリング

バインディング操作の中には、1 フレームで処理するには長すぎる場合があります。バインディング操作を 1 つのフレームで処理すると、UI が応答しなくなる場合があります。これを防ぐために、これらのバインディング操作はいくつかのフレームにまたがって行われることがあります。例えば、ポーリングされるオブジェクトの数によっては、変更を検出するのに数回の更新が必要になるかもしれません。

その他の参考資料

バインド可能なデータ型とフィールド
バインディングの例