关于协程 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后直接执行,这就很奇怪了,不是应该是下一帧来执行吗,怎么本帧就执行了
...全文
991 2 点赞 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
YG_jzjz 2021-05-13
有没有大佬来帮萌新看看啊
  • 打赏
  • 举报
回复
带酒书生 2021-05-07
我讲一下我得猜测哈,希望有大佬指正,在unity生命周期里,awake和enable属于最先执行的,他们之后的start函数也算一帧的,之所以看到经过一个update就执行了,就是因为start里面也经过了一帧,楼主没把这个算进去。
  • 打赏
  • 举报
回复
相关推荐
发帖
Unity3D
加入

1913

社区成员

Unity3D相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2021-05-05 05:32
社区公告

Unity3D社区公告:

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