unity协程,频繁调用时,只执行最后一次

设计了一个延迟机制,用于让一个延迟执行的动作,在一定时间内被频繁调用时,只执行最后一次。

知识点

简单介绍一下,协程的停止方法 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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值