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

Unity协程条件满足但未执行结束逻辑,如何修复?

修复Unity协程中完成状态未触发的问题

咱们来拆解下你这段协程的问题:你写的初始if判断完全不会被执行,而且循环结束后没有更新完成状态的逻辑,这就是为什么finishedShortFlashes永远不会设为true的原因。

问题根源

  1. 无效的初始判断:你刚把numFlashesSoFar赋值为1,紧接着判断它是否大于maxFlashes(3),这个条件从一开始就不成立,所以那段完成日志和状态设置的代码永远跑不起来。
  2. 循环结束后无收尾逻辑:当numFlashesSoFar循环到4时退出while循环,但你没有在循环结束后设置finishedShortFlashes = true,也没有输出完成日志,导致后续依赖这个状态的Update逻辑触发不了。

修复后的代码

private IEnumerator ShortFlashes() 
{
    this.startedShortFlashes = true;
    this.finishedShortFlashes = false;
    
    const int maxFlashes = 3;
    int numFlashesSoFar = 1;

    while (numFlashesSoFar <= maxFlashes) 
    {
        yield return new WaitForSecondsRealtime(0.05f);
        this.Renderer.enabled = true;
        yield return new WaitForSecondsRealtime(0.05f);
        this.Renderer.enabled = false;
        
        Debug.Log("Number of short flashes so far: " + numFlashesSoFar);
        numFlashesSoFar++;
    }

    // 循环结束后执行完成逻辑
    Debug.Log("All 3 short flashes finished!");
    this.finishedShortFlashes = true;
}

关键改动说明

  • 删除了那个无用的初始if判断,避免代码冗余
  • 在while循环结束后,统一设置完成状态并输出日志——因为当numFlashesSoFar超过3时,循环会自动退出,这时就是所有闪屏完成的时机
  • 保持了原有的闪屏逻辑,确保闪屏次数和日志输出正常

这样修改后,协程跑完3次闪屏后,就会正确更新finishedShortFlashes为true,你的Update方法里的后续动作就能正常触发啦。

内容的提问来源于stack exchange,提问作者M.Y. Babt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:55