Exemple #1
0
    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;
            }
        }
    }