首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WaitForEndOfFrame在第一次运行时被调用两次

WaitForEndOfFrame在第一次运行时被调用两次
EN

Stack Overflow用户
提问于 2020-11-21 12:00:15
回答 1查看 424关注 0票数 0

我正在尝试理解WaitForEndOfFrame,几乎可以理解它,但是问题是当遇到第一个yield时,它跳过并保存到下一个帧,在下一个帧中,它在呈现结束时被恢复,但是它被调用了两次,并且它继续按照预期的方式工作。无法了解为什么在第二帧中调用yield后的预期代码两次。

代码语言:javascript
运行
复制
void Update()
{
    print("1 - " + Time.frameCount);
    StartCoroutine(Enu());
    print("3 - " + Time.frameCount);
}

IEnumerator Enu()
{
    print("2 - " + Time.frameCount);
    yield return new WaitForEndOfFrame();
    print("4 - " + Time.frameCount);
}

1-1

2-1

3-1

--

1-2

2-2

3-2

4-2

4-2 <--?

--

1-3

2-3

3-3

4-3

--

1-4

2-4

3-4

4-4

--

1-5

2-5

3-5

4-5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-21 14:22:04

我要说,它不会被调用两次,但是所发生的情况是,在第一个帧中启动的第一个协同线将一直持续到第二个帧中,在第二个帧中,frameCount已经是2

这似乎是一个与和应用程序的第一个框架相关的统一

参见例如这个职位(第二个从底部从丹图斯)

如果他们遇到了完全相同的问题,那么通过将当前的frameCount作为参数传递到例程中,这样他们就可以更好地测试它,这样他们就可以知道哪个帧实际上是继续的:

公共类WaitForEndTest : MonoBehaviour {私有void () { Debug.Log (" Update:“+ Time.frameCount);StartCoroutine (WaitForEndOfFrameCoroutine (Time.frameCount));} private IEnumerator WaitForEndOfFrameCoroutine (int frameCount) { Debug.Log (帧结束前的”+frameCount“);产生返回新的WaitForEndOfFrame ();Debug.Log (”在帧结束后:“+ frameCount);}}

也被印成类似于你的箱子

更新:1帧结束前更新:1更新:2帧结束前更新:2帧结束后更新:1帧结束后更新:2

在应用程序的初始化过程中,你应该把它看作是团结的一个小插曲,忽略它;)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64942789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档