【发布时间】:2017-06-02 21:05:35
【问题描述】:
我目前正在尝试在 Unity 的上下文中理解 IEnumerator 和 Coroutine,并且对“yield return null”的执行情况不太有信心。目前我相信它基本上会暂停并等待下一帧,在下一帧中它会再次执行 while 语句。
如果我省略了“yield return null”,那么该对象似乎会立即移动到它的目的地,或者可能会“跳过很多帧”。所以我想我的问题是这个while循环中的“yield return null”函数是如何实现的,为什么需要它。
void Start () {
StartCoroutine(Move());
}
IEnumerator Move(){
while (a > 0.5f){
... (moves object up/down)
yield return null; // <---------
}
yield return new WaitForSeconds(0.5f);
.... (moves object up/down)
StartCoroutine(Move());
}
【问题讨论】:
-
我自己对协程并不熟悉,但我的猜测是它们每帧(或其他)会运行一次,
yield return基本上是说“等到下一次更新再继续”的快捷方式”。如果没有它,while 循环将一直运行到一次更新完成,这就是为什么没有它时对象会立即移动。 -
@Abion47,所以如果说要进行 40 次迭代,并且我们在其间添加了 yield return null,这是否意味着它需要 40 帧才能完成迭代?
-
如果是这样,那么运动将取决于 fps?如果是 60 fps,那么它会在不到一秒的时间内到达目标,如果是 20fps,它会在 2 秒内到达目标?
-
@supernatural 基本上,是的。
标签: c# unity3d yield coroutine ienumerator