97 lines
2.3 KiB
C#
97 lines
2.3 KiB
C#
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
|
||
} |