2025-09-08 17:37:12 +08:00

97 lines
2.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
/// <summary>
/// 我的自定义Button继承 Button
/// </summary>
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
/// <summary>
/// 处理长按
/// </summary>
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
}