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

含yield return的Unity协程函数未执行,如何正确调用?

正确调用Unity协程的方法

你的问题出在没有使用Unity提供的协程启动机制,直接获取IEnumerator对象或手动遍历都不会触发协程的执行逻辑——Unity协程依赖引擎的帧循环调度来推进。

正确调用方式

在继承自MonoBehaviour的脚本中,使用StartCoroutine()方法启动协程:

// 在任意MonoBehaviour的方法内调用
StartCoroutine(getData());

如果需要后续停止协程,可以保存协程的引用:

private Coroutine _dataFetchCoroutine;

// 启动协程
_dataFetchCoroutine = StartCoroutine(getData());

// 若需要停止协程,可调用
// StopCoroutine(_dataFetchCoroutine);

为什么之前的方法无效

  • 直接执行IEnumerator data = getData();只会创建一个迭代器对象,不会触发协程内部的代码执行。
  • 用foreach遍历迭代器虽然会执行部分逻辑,但Unity协程中的yield return(比如等待网络请求完成)依赖引擎的异步调度,手动遍历无法处理这类异步等待,也无法和Unity的帧循环同步,因此无法完成网络请求流程。

注意事项

  • 协程只能在继承MonoBehaviour的脚本中启动,且该脚本挂载的GameObject必须处于激活状态,否则协程不会运行。
  • 如果你的方法不在MonoBehaviour类中,可以通过获取场景中激活的MonoBehaviour对象来启动协程,比如:FindObjectOfType<YourScript>().StartCoroutine(getData());(不推荐频繁使用FindObjectOfType,建议提前持有引用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:35:03