You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

计数器达特定值时仅执行一次IEnumerator函数的实现问题

解决Update中重复触发协程的问题

嘿,这个问题我之前也碰到过!核心原因是Update函数每帧都会执行一次,只要你的counter保持等于17的状态,每帧都会进入那个if分支,反复调用CallProcess(),自然就会重复启动协程了。给你几个简单有效的修改方案:

方案1:触发后立刻改变counter的值

这是最直接的方式,只要触发一次流程,就把counter改成一个不会再等于17的值,这样下帧就不会再触发了:

void Update() {
    if (counter == 17) {
        CallProcess();
        counter++; // 或者直接设为一个无关值,比如 counter = -1;
    }
}

适合场景:counter达到17后就不会再回到这个数值的情况。

方案2:添加一个触发标记(更灵活)

定义一个布尔变量来记录流程是否已经触发过,避免重复执行。如果之后还需要再次触发这个流程(比如counter可能循环回到17),还能在协程结束后重置标记:

首先在类里添加标记变量:

private bool hasTriggered17Process = false;

然后修改Update里的判断逻辑:

void Update() {
    if (counter == 17 && !hasTriggered17Process) {
        CallProcess();
        hasTriggered17Process = true;
    }
}

最后在你的协程结束时重置标记(如果需要再次触发的话):

private IEnumerator StartProcess() {
    yield return StartCoroutine (Process1());
    // 注意这里你原代码拼错了:proccess1_done → process1_done
    if (process1_done) {
        yield return StartCoroutine (Process2());
        if (process2_done) {
            process1_done = false;
            process2_done = false;
            hasTriggered17Process = false; // 重置标记,允许下次counter=17时再次触发
        }
    }
}

适合场景:需要多次触发该流程的情况,或者counter可能反复回到17的场景。

另外提个小细节:你原代码里的proccess1_done多写了一个c,应该是process1_done,记得修正,不然会编译报错哦~

内容的提问来源于stack exchange,提问作者zoenightshade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:25:21