public static void ExecuteOnClickManually(Button button) { SerializedProperty onClickCalls = new SerializedObject(button).FindProperty("m_OnClick.m_PersistentCalls.m_Calls"); // Execute every onClick calls. for (int i = 0; i < onClickCalls.arraySize; i++) { SerializedProperty onClickCall = onClickCalls.GetArrayElementAtIndex(i); // Try to cast the target to a monoBehaviour variable. MonoBehaviour callTarget = button.onClick.GetPersistentTarget(i) as MonoBehaviour; if (!callTarget) { continue; } // Tries to invoke the corresponding method on the target, for all types until success. string methodName = button.onClick.GetPersistentMethodName(i); if (callTarget.FindAndInvokeMethod(methodName, onClickCall.FindPropertyRelative("m_Arguments.m_ObjectArgument").objectReferenceValue) || callTarget.FindAndInvokeMethod(methodName, onClickCall.FindPropertyRelative("m_Arguments.m_IntArgument").intValue) || callTarget.FindAndInvokeMethod(methodName, onClickCall.FindPropertyRelative("m_Arguments.m_FloatArgument").floatValue) || callTarget.FindAndInvokeMethod(methodName, onClickCall.FindPropertyRelative("m_Arguments.m_BoolArgument").boolValue) || callTarget.FindAndInvokeMethod <object>(methodName)) { continue; } } }