- Home /
Get UnityEvent reference from SerializedProperty
I have a custom editor in which I'm displaying a UnityEvent. All works fine. However, I want to always ensure the PersistentListenerState is always Runtime only. Unfortunately I'm unable to convert the SerializedProperty of a UnityEvent to an actual UnityEvent. I was anticipating I could just always set the PersistentListenerState to enforce this.
private void OnEnable() {
mMyEventProp = serializedObject.FindProperty("mMyEvent ");
}
public override void OnInspectorGUI() {
serializedObject.Update();
EditorGUILayout.PropertyField(mOnCreatePayloadProp);
//I was hoping to do something like
var myEvent = mMyEventProp.objectReferenceValue as MyEvent;
for (int index = 0; index < myEvent.GetPersistentEventCount(); index++) {
myEvent.SetPersistentListenerState(index, UnityEventCallState.RuntimeOnly);
}
//But get compile time error with casting objectReferenceValue
serializedObject.ApplyModifiedProperties();
}
Answer by Adam-Mechtley · Nov 14, 2016 at 08:33 AM
Hi @FatCatz! SerializedProperty.objectReferenceValue only returns the value for properties whose type is UnityEngine.Object or a subclass. You want to do something like the following:
serializedObject.Update ();
EditorGUILayout.PropertyField (mMyEventProp);
SerializedProperty persistentCalls = mMyEventProp.FindPropertyRelative ("m_PersistentCalls.m_Calls");
for (int i = 0; i < persistentCalls.arraySize; ++i)
persistentCalls.GetArrayElementAtIndex (i).FindPropertyRelative ("m_CallState").intValue = (int)UnityEngine.Events.UnityEventCallState.RuntimeOnly;
serializedObject.ApplyModifiedProperties ();
Worked like a charm. Thank you. They really make that hidden.
Your answer
Follow this Question
Related Questions
How to initialize array[][] via SerializedProperty? 1 Answer
How do I associate my custom object for the serializedProperty objectReferenceValue 1 Answer
Changing isExpanded property from another Editor 0 Answers
Calling ApplyModifiedProperties results in other variables resetting to 0? 0 Answers
Unity Editor Scripts: GameObject Added / Removed Event? 1 Answer