Unity协程条件满足但未执行结束逻辑,如何修复?
修复Unity协程中完成状态未触发的问题
咱们来拆解下你这段协程的问题:你写的初始if判断完全不会被执行,而且循环结束后没有更新完成状态的逻辑,这就是为什么finishedShortFlashes永远不会设为true的原因。
问题根源
- 无效的初始判断:你刚把
numFlashesSoFar赋值为1,紧接着判断它是否大于maxFlashes(3),这个条件从一开始就不成立,所以那段完成日志和状态设置的代码永远跑不起来。 - 循环结束后无收尾逻辑:当
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
相关产品推荐
相关产品推荐

