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; } } /// /// 用于处理ScrollRect中点击事件和拖动事件的冲突 /// public PointerEvtDataDelegate OnScrollBeginDrag; /// /// 用于处理ScrollRect中点击事件和拖动事件的冲突 /// private PointerEvtDataDelegate m_OnScrollDrag; public PointerEvtDataDelegate OnScrollDrag { get { return m_OnScrollDrag; } set { //m_OnScroll= value != null; m_OnScrollDrag = value; } } /// /// 用于处理ScrollRect中点击事件和拖动事件的冲突 /// public PointerEvtDataDelegate OnScrollEndDrag; /// /// 鼠标按下事件 /// public OneParamDelegate OnDown; /// /// 鼠标放开事件 /// 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(); if(listener==null) { listener = go.AddComponent(); } listener.enabled = true; return listener; } /// /// 重载点击UI点击的事件,包含所有的UI组件,并传递被点击的物体 /// /// 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; } /// /// 开始拖动 /// /// private Vector2 m_BeginSrPos = Vector2.zero; public override void OnBeginDrag(PointerEventData eventData) { if (null != OnScrollBeginDrag && enabled) { m_BeginSrPos = eventData.position; OnScrollBeginDrag(eventData); } } /// /// 拖动中 /// /// 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); } } /// /// 结束拖动 /// /// public override void OnEndDrag(PointerEventData eventData) { if (null != OnScrollEndDrag && enabled) { m_OnScroll = false; OnScrollEndDrag(eventData); } } /// /// 鼠标按下 /// /// public override void OnPointerDown(PointerEventData eventData) { if (null != OnDown && enabled) OnDown(gameObject); } /// /// 鼠标放开 /// /// public override void OnPointerUp(PointerEventData eventData) { if (null != OnUp && enabled) OnUp(gameObject); } public static UIEventTrigger Contains(GameObject go) { return go.GetComponent(); } private void OnDisable() { m_DoubleClick = false; continueClick = true; m_OnScroll = false; } }