I draw in the inspector property to ScriptableObject like this:
EditorGUILayout.PropertyField(myScriptableObject);
How can I detect when reference was added/removed in the inspector?
For eg. when I remove reference with DEL key, I would like to call an event or do sth.
@metroidsnes , you could do the following:
EditorGUI.BeginChangeCheck();
EditorGUI.PropertyField(r, sp, GUIContent.none);
if (EditorGUI.EndChangeCheck())
{
// Do something when the property changes
}
You can use MonoBehavior.OnValidate()
It runs whenever there is a change to a property of the component script it is in (I don’t know how it behaves when interacting with custom inspectors). It works in both runtime and design-time.
From there, you could check if the value has changed to null, and I suspect that would be similar to checking for a deleted value like you want.
you can check it with,check manual for more reference
if(GUI.changed)
{
}
Here is a simple system which let’s you keep track of changed variables and call functions if value is changed.
using UnityEditor;
[CustomEditor(typeof(Foo))]
public class FooEditor : Editor {
public SerializedProperty value;
void OnEnable() {
value = serializedObject.FindProperty("value");
}
public override void OnInspectorGUI() {
// Get value before change
int previousValue = value.intValue;
// Make all the public and serialized fields visible in Inspector
base.OnInspectorGUI();
// Load changed values
serializedObject.Update();
// Check if value has changed
if (previousValue != value.intValue) {
// Do something...
Foo foo = (Foo)target;
foo.CallPublicFunction();
}
serializedObject.ApplyModifiedProperties();
}
}