示例#1
0
        static UnityEventReflector()
        {
            // ReSharper disable PossibleNullReferenceException
            var baseType = typeof(UnityEventBase);

            var m_RebuildPersistentCallsIfNeeded = baseType.GetMethod(
                "RebuildPersistentCallsIfNeeded",
                BindingFlags.Instance | BindingFlags.NonPublic
                );

            rebuildPersistentCallsIfNeeded =
                ue => m_RebuildPersistentCallsIfNeeded.Invoke(ue, noArgs);

            var f_PersistentCalls = baseType.GetField(
                "m_PersistentCalls",
                BindingFlags.Instance | BindingFlags.NonPublic
                );

            persistentCalls = ue => new PersistentCallGroup(f_PersistentCalls.GetValue(ue));

            var persistentCallType = Type2.getType(UnityEngineEventsPersistentCall).rightOrThrow;
            var m_methodInfo       =
                typeof(UnityEventBase).GetMethod(
                    "FindMethod",
                    BindingFlags.Instance | BindingFlags.NonPublic,
                    Type.DefaultBinder,
                    new[] { persistentCallType },
                    null
                    );

            findMethod = (ue, pc) => F.opt((MethodInfo)m_methodInfo.Invoke(ue, new [] { pc.obj }));

            // ReSharper restore PossibleNullReferenceException
        }