我正在尝试理解WaitForEndOfFrame,几乎可以理解它,但是问题是当遇到第一个yield
时,它跳过并保存到下一个帧,在下一个帧中,它在呈现结束时被恢复,但是它被调用了两次,并且它继续按照预期的方式工作。无法了解为什么在第二帧中调用yield
后的预期代码两次。
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
发布于 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
在应用程序的初始化过程中,你应该把它看作是团结的一个小插曲,忽略它;)
https://stackoverflow.com/questions/64942789
复制相似问题