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