| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using UnityEngine.EventSystems; |
| | | using CJ.Wait; |
| | | 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; |
| | | } |
| | | } |
| | | using System.Collections;
|
| | | using System.Collections.Generic;
|
| | | using UnityEngine;
|
| | | using UnityEngine.EventSystems;
|
| | | using CJ.Wait;
|
| | | 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;
|
| | | }
|
| | | }
|