| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using Fort23.UTool;
 
- using UnityEngine;
 
- using UnityEngine.EventSystems;
 
- public class LongPressBtn : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerClickHandler
 
- {
 
-     private float _time;
 
-     public float startTime = 0.5f;
 
-     public float intervalTime = 0.05f;
 
-     public Action onClick;
 
-     /// <summary>
 
-     /// 连按
 
-     /// </summary>
 
-     public Action longPress;
 
-     /// <summary>
 
-     /// 长按结束
 
-     /// </summary>
 
-     public Action longPressEnd;
 
-     /// <summary>
 
-     /// 是否按下状态
 
-     /// </summary>
 
-     [HideInInspector] public bool isPressd;
 
-     private bool _isTriggerLongPress;
 
-     /// <summary>
 
-     /// 是否触发了长按
 
-     /// </summary>
 
-     public bool isTriggerLongPress => _isTriggerLongPress;
 
-     void OnPress(bool pressed)
 
-     {
 
-         if (pressed) // 按下
 
-         {
 
-             isPressd = true;
 
-         }
 
-         else // 松开或离开
 
-         {
 
-             if (isPressd)
 
-             {
 
-                 if (_isTriggerLongPress ) // 触发了长按且不是离开,执行 longPressEnd
 
-                 {
 
-                     longPressEnd?.Invoke();
 
-                     _isTriggerLongPress = false;
 
-                 }
 
-             }
 
-             isPressd = false;
 
-             _time = 0;
 
-         }
 
-     }
 
-     private void Update()
 
-     {
 
-         if (isPressd && !_isTriggerLongPress)
 
-         {
 
-             _time += Time.deltaTime;
 
-             if (_time >= startTime)
 
-             {
 
-                 _isTriggerLongPress = true;
 
-                 _time -= intervalTime;
 
-                 longPress?.Invoke();
 
-             }
 
-         }
 
-         else if (isPressd && _isTriggerLongPress)
 
-         {
 
-             _time += Time.deltaTime;
 
-             if (_time >= intervalTime)
 
-             {
 
-                 _time -= intervalTime;
 
-                 longPress?.Invoke();
 
-             }
 
-         }
 
-     }
 
-     /// <summary>
 
-     /// 终止
 
-     /// </summary>
 
-     public void Terminated()
 
-     {
 
-         if (isPressd)
 
-         {
 
-             isPressd = false;
 
-             if (_isTriggerLongPress)
 
-             {
 
-                 longPressEnd?.Invoke();
 
-             }
 
-             _isTriggerLongPress = false;
 
-             _time = 0;
 
-         }
 
-     }
 
-     public void OnPointerDown(PointerEventData eventData)
 
-     {
 
-         OnPress(true);
 
-     }
 
-     public void OnPointerUp(PointerEventData eventData)
 
-     {
 
-         OnPress(false);
 
-     }
 
-     public void OnPointerExit(PointerEventData eventData)
 
-     {
 
-  
 
-         OnPress(false);
 
-      
 
-     }
 
-     public void OnPointerClick(PointerEventData eventData)
 
-     {
 
-         if (!_isTriggerLongPress) // 只有未触发长按时才触发点击
 
-         {
 
-             onClick?.Invoke();
 
-         }
 
-         isPressd = false;
 
-     }
 
- }
 
 
  |