Unity按钮实现长按
1、unity中实现按钮的长按功能,长按刷新和长按执行一次,同时可存在点击事件:
using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; public class ButtonExtension : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler { public float pressDurationTime = 1; public bool responseOnceByPress = false; public float doubleClickIntervalTime = 0.5f; public UnityEvent onDoubleClick; public UnityEvent onPress; public UnityEvent onClick; private bool isDown = false; private bool isPress = false; private float downTime = 0; private float clickIntervalTime = 0; private int clickTimes = 0; void Update() { if (isDown) { if (responseOnceByPress && isPress) { return; } downTime += Time.deltaTime; if (downTime > pressDurationTime) { isPress = true; onPress.Invoke(); } } if (clickTimes >= 1) { clickIntervalTime += Time.deltaTime; if (clickIntervalTime >= doubleClickIntervalTime) { if (clickTimes >= 2) { onDoubleClick.Invoke(); } else { onClick.Invoke(); } clickTimes = 0; clickIntervalTime = 0; } } } public void OnPointerDown(PointerEventData eventData) { isDown = true; downTime = 0; } public void OnPointerUp(PointerEventData eventData) { isDown = false; } public void OnPointerExit(PointerEventData eventData) { isDown = false; isPress = false; } public void OnPointerClick(PointerEventData eventData) { if (!isPress) { //onClick.Invoke(); clickTimes += 1; } else isPress = false; } }
2、将脚本添加到按钮上:
3、编写测试:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameStart : MonoBehaviour { ButtonExtension btn; void Start() { btn = GetComponent<ButtonExtension>(); btn.onClick.AddListener(Click); btn.onPress.AddListener(Press); btn.onDoubleClick.AddListener(DoubleClick); } void Click() { Debug.Log("单击"); } void Press() { Debug.Log("长按"); } void DoubleClick() { Debug.Log("双击"); } }
原文:https://blog.csdn.net/shuai1210/article/details/83866811
评论