unity 计时器, EventSystems,实现点按长按效果
编辑器环境 2021.3.3f1c1
原理:实现接口 IPointerDownHandler ,按下 开启0.5秒的一次性定时器,
在0.5秒前放开,视作点击
一次加1
0.5秒后放开视作长按
开启循环定时器,持续加1
放开,也是 up 抬起的时候,定时器 全部清除
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
public class TestBtn : MonoBehaviour, IPointerDownHandler
{
private TextMeshProUGUI text;
private bool isDwon = false;
void Start()
{
text = gameObject.transform.Find("Text (TMP)").gameObject.GetComponent<TextMeshProUGUI>();
}
public void onevent(string str)
{
if (isDwon)
{
isDwon = false;
}
else {
goodGril();
}
CancelInvoke();
}
public void OnPointerDown(PointerEventData eventData)
{
Invoke(nameof(ontTime), 0.5f);
}
void ontTime()
{
isDwon = true;
InvokeRepeating(nameof(moreTime), 0, 0.1f);
}
void goodGril() {
int i = int.Parse(text.text);
++i;
text.text = i.ToString();
}
void moreTime()
{
if (isDwon) {
goodGril();
}
}
}