协同线是一个函数,它可以暂停其执行(产生),直到给定的yieldInstructure结束为止。
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
void Start() {
print("Starting " + Time.time);
StartCoroutine(WaitAndPrint(2.0F));
print("Before WaitAndPrint Finishes " + Time.time);
}
IEnumerator WaitAndPrint(float waitTime) {
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
}
我对这个例子有很多疑问:
WaitAndPrint()
一条协同线?是WaitForSeconds()
一条协同线?yield return new WaitForSeconds(waitTime);
,为什么两者都是yield
和return
在场吗?这是一种特殊的返回类型,它确保函数在下一次调用产语句后从行中继续。如果yield
是一种特殊的return
,什么是return
在这里干什么?IEnumerator
?StartCoroutine
开始新的线索?WaitAndPrint()
在上面的例子中被调用了吗?做yield return new WaitForSeconds(waitTime);
真的回来了?如果是,那我猜WaitAndPrint()
在上面的代码中调用了两次。我猜StartCoroutine()
打电话WaitAndPrint()
好几次了。发布于 2018-05-28 15:00:48
yield
单独无效,并且后面总是有任意一种。return
或break
。
考虑一个标准的IEnDigator(不产生流控制消息)。
IEnumerator YieldMeSomeStuff()
{
yield "hello";
Console.WriteLine("foo!");
yield "world";
}
现在:
IEnumerator e = YieldMeSomeStuff();
while(e.MoveNext())
{
Console.WriteLine(e.Current);
}
输出结果是什么?
hello
foo!
world
注意,我们第二次调用MoveNext
,在枚举数生成“World”之前,会在枚举数中运行一些代码。这意味着,在枚举数中,我们可以编写执行的代码,直到它到达yield return
语句,然后简单地暂停直到有人调用。MoveNext
(轻松地捕获所有状态/变量,这样我们就可以找到我们停止的地方)。在.之后MoveNext
调用之后的下一段代码。yield return
语句可以运行到另一个yield return
到达了。因此,我们现在可以控制代码在yield return
语句的MoveNext
调用枚举数。
https://stackoverflow.com/questions/-100003368
复制相似问题