Пример #1
0
        public static GameObject ExecuteHierarchy <T>(GameObject root, BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents.EventFunction <T> callbackFunction) where T : IEventSystemHandler
        {
            GetEventChain.Invoke(null, new object[] { root, InternalTransformList });
            // GetEventChain(root, s_InternalTransformList);
            GameObject          firstExecuteObject = null;
            UPointerEventDataEx eventDataEx        = eventData as UPointerEventDataEx;

            for (var i = 0; i < InternalTransformList.Count; i++)
            {
                var transform = InternalTransformList[i];

                //当前找到第一个处理事件的对象且需要进行冒泡处理
                if (UnityEngine.EventSystems.ExecuteEvents.Execute(transform.gameObject, eventData, callbackFunction))
                {
                    if (firstExecuteObject == null)
                    {
                        firstExecuteObject = transform.gameObject;
                    }

                    if (eventDataEx == null || !eventDataEx.CanBubbleEvent)
                    {
                        return(firstExecuteObject);
                    }
                }
            }
            return(firstExecuteObject);
        }
Пример #2
0
        public static bool ExecuteEx <T>(GameObject target, BaseEventData eventData, ExecuteEvents.EventFunction <T> functor) where T : IEventSystemHandler
        {
            GetEventChain.Invoke(null, new object[] { target, InternalTransformList });
            var        internalHandlers    = s_HandlerListPool.Get();
            MethodInfo GetEventListGeneric = GetEventList.MakeGenericMethod(new Type[] { typeof(T) });

            for (int i = 0; i < InternalTransformList.Count; i++)
            {
                var transform = InternalTransformList[i];
                //GetEventList<T>(target, internalHandlers);
                GetEventListGeneric.Invoke(null, new object[] { transform.gameObject, internalHandlers });
            }


            //	if (s_InternalHandlers.Count > 0)
            //		Debug.Log("Executinng " + typeof (T) + " on " + target);
            UPointerEventDataEx eventDataEx = eventData as UPointerEventDataEx;

            for (var i = 0; i < internalHandlers.Count; i++)
            {
                T arg;
                try
                {
                    arg = (T)internalHandlers[i];
                }
                catch (Exception e)
                {
                    var temp = internalHandlers[i];
                    Debug.LogException(new Exception(string.Format("Type {0} expected {1} received.", typeof(T).Name, temp.GetType().Name), e));
                    continue;
                }

                try
                {
                    functor(arg, eventDataEx);
                }
                catch (Exception e)
                {
                    Debug.LogException(e);
                }


                if (!eventDataEx.CanBubbleEvent)
                {
                    break;
                }
            }

            var handlerCount = internalHandlers.Count;

            s_HandlerListPool.Release(internalHandlers);
            return(handlerCount > 0);
        }
Пример #3
0
        public static UPointerEventDataEx CurrentPointerEventData(this EventSystem _EventSystem)
        {
            UPointerEventDataEx resultEventData = null;
            var inputModule = _EventSystem.currentInputModule as USpeedInputModule;

            if (inputModule != null)
            {
                resultEventData = inputModule.CurrentPointerEx;
            }
            else
            {
                Debug.LogWarning("当前UI输入模块非USpeedInputModule");
            }

            return(resultEventData);
        }
Пример #4
0
        protected bool GetPointerData(int id, out UPointerEventDataEx data, bool create)
        {
            PointerEventData pData;

            if (!m_PointerData.TryGetValue(id, out pData) && create)
            {
                data = new UPointerEventDataEx(eventSystem)
                {
                    pointerId = id,
                };
                m_PointerData.Add(id, data);
                return(true);
            }

            data = pData as UPointerEventDataEx;
            data.ResetEx();
            return(false);
        }