123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.EventSystems;
- using UnityEngine.UIElements;
- public class MyUIButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
- {
- public System.Action onClick;
-
- public System.Action OnPressAndHold;
- public bool isUsePressAndHold;
- public float holdTime;
- private bool isPointerDown = false; // 是否按下
- private float pointerDownTimer = 0f; // 按下计时器
- public void OnPointerDown(PointerEventData eventData)
- {
- isPointerDown = true;
- pointerDownTimer = 0;
- }
- public void OnPointerUp(PointerEventData eventData)
- {
- if (isUsePressAndHold)
- {
- if (pointerDownTimer < holdTime)
- {
- onClick?.Invoke();
- }
- }
- else
- {
- onClick?.Invoke();
- }
- isPointerDown = false;
- }
- private void FixedUpdate()
- {
- if (!isUsePressAndHold)
- {
- return;
- }
- if (isPointerDown)
- {
- pointerDownTimer += Time.deltaTime; // 计时
- if (pointerDownTimer >= holdTime) // 达到长按时间
- {
- OnPressAndHold?.Invoke(); // 触发长按事件
- isPointerDown = false; // 重置状态,避免重复触发
- }
- }
- }
- }
|