设计了一个延迟机制,用于让一个延迟执行的动作,在一定时间内被频繁调用时,只执行最后一次。
知识点
简单介绍一下,协程的停止方法 StopCoroutine。对于一个普通的协程
// 定义
IEnumerator AABB()
{
while(true) {
// do sth.
yield return null;
}
}
// 调用
StartCoroutine(AABB()); 或 StartCoroutine("AABB");
// 停止
StopCoroutine(AABB()); 或 StopCoroutine("AABB");
当有参数时变成
// 定义
IEnumerator AABB(string str)
{
while(true) {
// do sth.
yield return null;
}
}
// 调用
// 有参数时,不能使用函数名的字符串 StartCoroutine("AABB")方式调用了
Coroutine aabb = StartCoroutine(AABB("123"));
// 停止
// 调用时传入参数为"123",
// 但是执行 StopCoroutine("123")并不能停下该协程
StopCoroutine(aabb);
案例
public string log;
Coroutine async;
float threshold; //时间阈值,小于该时间,则只执行后一次
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if(async != null)
{
Debug.Log("停下上一个: " + log);
// 如果在指定时间内,有新的操作,取消上一个协程
StopCoroutine(async);
}
log = "www" + Random.Range(0, 100);
async = StartCoroutine(DelayedAction(log));
}
}
IEnumerator DelayedAction(string content)
{
yield return new WaitForSeconds(threshold);
Debug.Log("success >> " + content);
async = null;
}