using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; /// /// 我的自定义Button,继承 Button /// public class LongPressButton : Button { // 构造函数 protected LongPressButton() { my_onLongPress = new ButtonClickedEvent(); my_onLongPress_Up = new ButtonClickedEvent(); } // 长按 public ButtonClickedEvent my_onLongPress; // 长按抬起 public ButtonClickedEvent my_onLongPress_Up; public ButtonClickedEvent OnLongPress { get { return my_onLongPress; } set { my_onLongPress = value; } } public ButtonClickedEvent OnLongPress_Up { get { return my_onLongPress_Up; } set { my_onLongPress_Up = value; } } // 长按需要的变量参数 private bool my_isStartPress = false; private float my_curPointDownTime = 0f; private float my_longPressTime = 0f; private bool my_longPressTrigger = false; void Update() { CheckIsLongPress(); } #region 长按 /// /// 处理长按 /// void CheckIsLongPress() { if (my_isStartPress && !my_longPressTrigger) { if (Time.time > my_curPointDownTime + my_longPressTime) { my_longPressTrigger = true; my_isStartPress = false; if (my_onLongPress != null) { my_onLongPress.Invoke(); } } } } public override void OnPointerDown(PointerEventData eventData) { // 按下刷新當前時間 base.OnPointerDown(eventData); my_curPointDownTime = Time.time; my_isStartPress = true; my_longPressTrigger = false; } public override void OnPointerUp(PointerEventData eventData) { // 指針擡起,結束開始長按 base.OnPointerUp(eventData); my_isStartPress = false; if (my_longPressTrigger) { if (my_onLongPress_Up != null) { my_onLongPress_Up.Invoke(); } my_longPressTrigger = !my_longPressTrigger; } } public override void OnPointerExit(PointerEventData eventData) { // 指針移出,結束開始長按,計時長按標志 base.OnPointerExit(eventData); my_isStartPress = false; } #endregion }