バージョン: 2021.3 以降
この例では、バインドされたシリアル化されたプロパティが変更されたときに、コールバックを受け取る方法を示します。
シーン内のゲームオブジェクトの名前にバインドする TextField を持つカスタムエディタウィンドウを作成します。ゲームオブジェクトの名前が GameObject の場合、テキストフィールドのラベルの背景色は濃い赤に変わります。
この例で作成するすべてのファイルは、GitHub リポジトリ にあります。
This guide is for developers familiar with the Unity Editor, UI Toolkit, and C# scripting. You are recommended to have a basic understanding of the following:
C#スクリプトを以下のように作成します。
CheckName() メソッドを呼び出します。TrackPropertyValue() 拡張メソッドでそのメソッドを登録します。TrackPropertyValue() を別のプロパティで再度呼び出す前に、Unbind() を呼び出します。VisualElement は、一度に 1 つのプロパティしか追跡できません。
Unity で任意のテンプレートでプロジェクトを作成します。
Project ウィンドウに、 callback-SerializedProperty-changes という名前のフォルダーを作成し、ファイルを保存してください。
callback-SerializedProperty-change フォルダー内に、Editor という名前のフォルダーを作成します。
Editor フォルダーに、SimpleBindingPropertyTrackingExample.cs という名の C# スクリプトを作成し、そのコンテンツを以下と置き換えます。 
using UnityEditor;
using UnityEngine;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace UIToolkitExamples
{
    public class SimpleBindingPropertyTrackingExample : EditorWindow
    {
        TextField m_ObjectNameBinding;
        [MenuItem("Window/UIToolkitExamples/Simple Binding Property Tracking Example")]
        public static void ShowDefaultWindow()
        {
            var wnd = GetWindow<SimpleBindingPropertyTrackingExample>();
            wnd.titleContent = new GUIContent("Simple Binding Property Tracking");
        }
        
        public void CreateGUI()
        {
            m_ObjectNameBinding = new TextField("Object Name Binding");
            rootVisualElement.Add(m_ObjectNameBinding);
            OnSelectionChange();
        }
        public void OnSelectionChange()
        {
            GameObject selectedObject = Selection.activeObject as GameObject;
            if (selectedObject != null)
            {
                // Create the SerializedObject from the current selection
                SerializedObject so = new SerializedObject(selectedObject);
                // Note: the "name" property of a GameObject is actually named "m_Name" in serialization.
                SerializedProperty property = so.FindProperty("m_Name");
                
                // Ensure to use Unbind() before tracking a new property
                m_ObjectNameBinding.Unbind();
                m_ObjectNameBinding.TrackPropertyValue(property, CheckName);
                // Bind the property to the field directly
                m_ObjectNameBinding.BindProperty(property);
                CheckName(property);
            }
            else
            {
                // Unbind any binding from the field
                m_ObjectNameBinding.Unbind();
            }
        }
        void CheckName(SerializedProperty property)
        {
            if (property.stringValue == "GameObject")
            {
                m_ObjectNameBinding.style.backgroundColor = Color.red * 0.5f;
            }
            else
            {
                m_ObjectNameBinding.style.backgroundColor = StyleKeyword.Null;
            }
        }
    }
}
GameObject の場合、ラベルの背景色が濃い赤に変わります。