Search code examples
c#unity-game-engineui-toolkit

How to listen to changes in a IMGUIContainer with UIToolkit?


Inside an EditorWindow with UIToolkit, I am drawing the content of a scriptable object with an InspectorElement that generate a IMGUIContainer. How can I listen to any change happening in this IMGUIContainer?

_levelInspector = new InspectorElement(_selectedLevel)
{
    dataSourceType = typeof(Level)
};
            
rootVisualElement.Add(_levelInspector);
            
// ...
            
_levelInspector.Bind(new SerializedObject(_selectedLevel));
            
_imguiLevelContainer = _levelInspector.Q<IMGUIContainer>();
    
// This doesn't work because my editor would need to be drew between the change check but it's already being drawn  
_imguiLevelContainer.onGUIHandler = () =>
{
    EditorGUI.BeginChangeCheck();

    if (EditorGUI.EndChangeCheck())
    {
        _levelListView.Rebuild();
        Debug.Log("Did change");
    }
};

Solution

  • It looks like I can listen to changes with TrackSerializedObject :

    SerializedObject so = new SerializedObject(_myObject);
                
    _imguiContainer.Bind(so);
                
    _imguiContainer.TrackSerializedObjectValue(so, (serializedObject) =>
    {
        Debug.Log("On changed");
    });