UI Toolkit のバインディングシステムが実装レベルでどのように機能するかについて、以下に説明します。
Bind()
メソッドを呼び出すと、最初の値を非同期で同期し、追跡します。つまり、フィールドの value
プロパティがすぐに更新できないことを意味します。これにより、まだどの UI にも加えられていない階層にバインディングを設定することができます。
バインディングシステムは、Unity オブジェクトのシリアル化されたデータに依存して変更検知を実装します。
SerializedObject
と 1 つ以上の要素との間にバインディングを作成した後、システムはこのオブジェクトに変更がないか、毎フレームではありませんが一定の間隔でポーリングします。以下の 2 つのステップで行われます。
SerializedObject
をシリアル化しポーリングして、シリアル化されたバイトの変更を検出します。変更がない場合停止します。バインディング操作の中には、1 フレームで処理するには長すぎる場合があります。バインディング操作を 1 つのフレームで処理すると、UI が応答しなくなる場合があります。これを防ぐために、これらのバインディング操作はいくつかのフレームにまたがって行われることがあります。例えば、ポーリングされるオブジェクトの数によっては、変更を検出するのに数回の更新が必要になるかもしれません。