关于协程 yield return null 调用时间

YG_jzjz 2021-05-05 05:32:08
协程中有一个 yield return null:根据unity的官方解释是下一帧到这才继续运行,同时根据unity脚本生命周期可知yield return null 之后的程序应在Update后面运行

下面是我的问题:分别在Start Awake OnEnable 中运行测试启动协程
private void Awake()
{
// StartCoroutine("tt");
}

private void OnEnable()
{
// StartCoroutine("tt");
}

private void Start()
{
StartCoroutine("tt");
}

private int a = 0;

void Update()
{
print("Update");

}
IEnumerator tt()
{
print("IEnumerator");
yield return null;
print("tt");

}

结果是:
Start中的协程是经过两个Update后执行,符合unity官方解释
Awake/Onenable中的协程是经过一个Update后直接执行,这就很奇怪了,不是应该是下一帧来执行吗,怎么本帧就执行了
...全文
1548 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
YG_jzjz 2021-05-13
  • 打赏
  • 举报
回复
有没有大佬来帮萌新看看啊
带酒书生 2021-05-07
  • 打赏
  • 举报
回复
我讲一下我得猜测哈,希望有大佬指正,在unity生命周期里,awake和enable属于最先执行的,他们之后的start函数也算一帧的,之所以看到经过一个update就执行了,就是因为start里面也经过了一帧,楼主没把这个算进去。

2,585

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧