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); }
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); }
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); }
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); }