突然发现之前写的按钮长按在两个长按按钮重叠的时候会出现问题,具体情况是按了一个按钮会执行两个按钮的事件,不重叠则没有些问题。对于这个问题,根本原因是长按的时候按的是哪一个按钮,对此修改脚本以解决该问题。
using UnityEngine;
- using System.Collections;
- using UnityEngine.Events;
- using UnityEngine.EventSystems;
- using UnityEngine.UI;
- [AddComponentMenu("UI/LongPressButton")]
- public class UILongPressButton : Selectable, IPointerDownHandler,IPointerExitHandler,IPointerUpHandler
- {
- [SerializeField]
- UnityEvent m_onLongPress = new UnityEvent();
- float interval = 0.1f;
- float longPressDelay = 0.5f;
- private bool isTouchDown = false;
- private bool isLongpress = false;
- private float touchBegin = 0;
- private float lastInvokeTime = 0;
- // Update is called once per frame
- void Update ()
- {
- if (isTouchDown && IsPressed() && interactable)
- {
- if (isLongpress)
- {
- if (Time.time - lastInvokeTime > interval)
- {
- m_onLongPress.Invoke();
- lastInvokeTime = Time.time;
- }
- }
- else
- {
- isLongpress = Time.time - touchBegin > longPressDelay;
- }
- }
- }
- public void OnPointerDown(PointerEventData eventData)
- {
- base.OnPointerDown(eventData);
- touchBegin = Time.time;
- isTouchDown = true;
- }
- public void OnPointerExit(PointerEventData eventData)
- {
- base.OnPointerExit(eventData);
- isTouchDown = false;
- isLongpress = false;
- }
- public void OnPointerUp(PointerEventData eventData)
- {
- base.OnPointerUp(eventData);
- isTouchDown = false;
- isLongpress = false;
- }
- }
浙公网安备 33010602011771号