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

协程在Start方法中正常运行,调用其他函数后WaitForSeconds后无法恢复求助

协程执行异常问题

问题描述

相关协程代码:

private IEnumerator testCoroutine()
{
    Debug.Log("1");
    yield return new WaitForSeconds(2);
    Debug.Log("2");
    yield return new WaitForSeconds(2);
    Debug.Log("3");
}

在Start方法中调用StartCoroutine(testCoroutine())时,协程可正常运行,依次打印1、2、3。但通过以下函数调用时,协程仅打印"1",无法输出后续的2和3:

public void Battle()
{
    StartCoroutine(testCoroutine());
}

public void EnableBattleScene()
{
    UIBattleScene.gameObject.SetActive(true);
    Battle();
}

EnableBattleScene函数会在玩家与敌人发生接触时被触发调用。

可能的原因及排查方向

  • 承载协程的GameObject被禁用或销毁:协程依赖其所属的MonoBehaviour所在GameObject运行,若在协程执行到yield return后,该GameObject被设置为非激活状态(SetActive(false))或被销毁(Destroy()),协程会直接终止,后续代码不再执行。检查触发战斗后,是否有其他逻辑修改了该脚本所在GameObject的激活状态或直接销毁了它。
  • Time.timeScale被设置为0:WaitForSeconds的计时基于Time.timeScale,如果某处将Time.timeScale设为0,等待时间会无限延长,协程会一直卡在yield return处。可以在yield return前后添加Debug.Log(Time.timeScale)来排查。
  • 场景切换导致原对象销毁:若触发战斗时伴随场景切换,原场景中的MonoBehaviour会被销毁,依附于它的协程也会中断。确认是否存在战斗触发后切换场景的逻辑。
  • 协程被手动终止:检查是否有其他代码调用了StopCoroutine或StopAllCoroutines,意外终止了这个测试协程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:24:28