| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEngine.EventSystems; | 
| using System; | 
|   | 
| public class UIEventTrigger : EventTrigger { | 
|     public delegate void ObjectDelegate(GameObject go,PointerEventData eventData); | 
|     public delegate void OneParamDelegate(GameObject go); | 
|     public delegate void PointerEvtDataDelegate(PointerEventData eventData); | 
|     public delegate void NoParamDelegate(); | 
|     public ObjectDelegate OnClick; | 
|     public OneParamDelegate OneParaClick; | 
|   | 
|     private bool doubleClick = false; | 
|     private bool m_DoubleClick = false; | 
|     private bool continueClick = true; | 
|     private NoParamDelegate m_OnDoubleClick; | 
|   | 
|     private bool m_OnScroll = false; | 
|   | 
|     public NoParamDelegate OnDoubleClick { | 
|         get { return m_OnDoubleClick; } | 
|         set { | 
|               doubleClick = value!=null; | 
|               m_OnDoubleClick = value; | 
|         } | 
|     } | 
|     /// <summary> | 
|     /// 用于处理ScrollRect中点击事件和拖动事件的冲突 | 
|     /// </summary> | 
|     public PointerEvtDataDelegate OnScrollBeginDrag; | 
|     /// <summary> | 
|     /// 用于处理ScrollRect中点击事件和拖动事件的冲突 | 
|     /// </summary> | 
|     private PointerEvtDataDelegate m_OnScrollDrag; | 
|     public PointerEvtDataDelegate OnScrollDrag { | 
|         get { return m_OnScrollDrag; } | 
|         set { | 
|             //m_OnScroll= value != null; | 
|             m_OnScrollDrag = value; | 
|         } | 
|     } | 
|     /// <summary> | 
|     /// 用于处理ScrollRect中点击事件和拖动事件的冲突 | 
|     /// </summary> | 
|     public PointerEvtDataDelegate OnScrollEndDrag; | 
|     /// <summary> | 
|     /// 鼠标按下事件 | 
|     /// </summary> | 
|     public OneParamDelegate OnDown; | 
|     /// <summary> | 
|     /// 鼠标放开事件 | 
|     /// </summary> | 
|     public OneParamDelegate OnUp; | 
|   | 
|     public NoParamDelegate OnNoParamsClick; | 
|   | 
|   | 
|     public static PointerEventData EventData; | 
|     private void Awake() | 
|     { | 
|         if (EventData == null) EventData =new PointerEventData(EventSystem.current); | 
|     } | 
|   | 
|     public static UIEventTrigger Get(GameObject go) | 
|     { | 
|         UIEventTrigger listener = null; | 
|         listener = go.GetComponent<UIEventTrigger>(); | 
|         if(listener==null) { | 
|             listener = go.AddComponent<UIEventTrigger>(); | 
|         } | 
|         listener.enabled = true; | 
|         return listener; | 
|     } | 
|     /// <summary> | 
|     /// 重载点击UI点击的事件,包含所有的UI组件,并传递被点击的物体 | 
|     /// </summary> | 
|     /// <param name="eventData"></param> | 
|     public override void OnPointerClick(PointerEventData eventData) | 
|     { | 
|         if (CheckDouble()) return; | 
|         if (CheckScroll()) return; | 
|         if (null != OnClick && enabled) OnClick(gameObject, eventData); | 
|         if (null != OneParaClick && enabled) OneParaClick(gameObject); | 
|         if (null != OnNoParamsClick && enabled) OnNoParamsClick(); | 
|     } | 
|   | 
|     private bool CheckDouble() | 
|     { | 
|         if (!doubleClick) return doubleClick; | 
|         if (!continueClick) return doubleClick; | 
|         if (m_DoubleClick) { | 
|             OnDoubleClick(); | 
|             continueClick = false; | 
|             m_DoubleClick = false; | 
|         } | 
|         else { | 
|             this.OnWaitCompelete(OnDoubleWait); | 
|             this.SetWait(0.3f); | 
|             this.DoWaitRestart(); | 
|             m_DoubleClick = true; | 
|         } | 
|         return doubleClick; | 
|     } | 
|   | 
|     private bool CheckScroll() | 
|     { | 
|         return m_OnScroll; | 
|     } | 
|   | 
|     private void OnDoubleWait(Component comp) | 
|     { | 
|         if (m_DoubleClick) { | 
|             if (null != OneParaClick && enabled) OneParaClick(gameObject); | 
|             if (null != OnNoParamsClick && enabled) OnNoParamsClick(); | 
|         } | 
|         continueClick = true; | 
|         m_DoubleClick = false; | 
|     } | 
|   | 
|     /// <summary> | 
|     /// 开始拖动 | 
|     /// </summary> | 
|     /// <param name="eventData"></param> | 
|     private Vector2 m_BeginSrPos = Vector2.zero; | 
|     public override void OnBeginDrag(PointerEventData eventData) | 
|     { | 
|         if (null != OnScrollBeginDrag && enabled)  | 
|         { | 
|             m_BeginSrPos = eventData.position; | 
|             OnScrollBeginDrag(eventData); | 
|         } | 
|   | 
|     } | 
|     /// <summary> | 
|     /// 拖动中 | 
|     /// </summary> | 
|     /// <param name="eventData"></param> | 
|     public override void OnDrag(PointerEventData eventData) | 
|     { | 
|         if (null != OnScrollDrag && enabled)  | 
|         { | 
|             if (Vector2.Distance(m_BeginSrPos, eventData.position) < 10.0f) { | 
|                 return; | 
|             } | 
|             m_OnScroll = true; | 
|             OnScrollDrag(eventData); | 
|         } | 
|     } | 
|     /// <summary> | 
|     /// 结束拖动 | 
|     /// </summary> | 
|     /// <param name="eventData"></param> | 
|     public override void OnEndDrag(PointerEventData eventData) | 
|     { | 
|         if (null != OnScrollEndDrag && enabled)  | 
|         { | 
|             m_OnScroll = false; | 
|             OnScrollEndDrag(eventData); | 
|         }  | 
|     } | 
|     /// <summary> | 
|     /// 鼠标按下 | 
|     /// </summary> | 
|     /// <param name="eventData"></param> | 
|     public override void OnPointerDown(PointerEventData eventData) | 
|     { | 
|         if (null != OnDown && enabled) OnDown(gameObject); | 
|     } | 
|     /// <summary> | 
|     /// 鼠标放开 | 
|     /// </summary> | 
|     /// <param name="eventData"></param> | 
|     public override void OnPointerUp(PointerEventData eventData) | 
|     { | 
|         if (null != OnUp && enabled) OnUp(gameObject); | 
|     } | 
|   | 
|     public static UIEventTrigger Contains(GameObject go) | 
|     { | 
|         return go.GetComponent<UIEventTrigger>(); | 
|     } | 
|   | 
|     private void OnDisable() | 
|     { | 
|         m_DoubleClick = false; | 
|         continueClick = true; | 
|         m_OnScroll = false; | 
|     } | 
| } |