我想了解c#中coroutines的语法(因为它对我来说真的很不寻常......)。
当我们做类似的事情时:
yield return new WaitForSeconds(2.0f);
Firstable:我理解这个陈述的目标,但不理解语法。
WaitForSeconds类代表什么?它应该是IEnumerator类型,因为这是函数的返回类型。但是根据文档http://docs.unity3d.com/ScriptReference/WaitForSeconds-ctor.html,它没有返回类型,它是一个Yield指令(在那里很混乱)
那么在这种情况下收益的目的是什么?
为什么我们将它与return关键字混合?
提前感谢。
答案 0 :(得分:0)
使用yield return调用创建一个返回类型的IEnumerable。这允许调用函数在计算值时处理值列表,而不是在最后一次处理所有值,就像刚刚返回集合一样。
在Unity3d中这很重要,因为绘制周期基本上都发生在一个线程上,所以你可以使用coroutines和yield return语法来嵌套脚本中的行为。
新的WaitForSeconds(...)调用允许执行上下文返回外部调用者一段时间,同时处理no-op有效地暂停执行MonoBehaviour,而不会暂停整个绘制线程。
答案 1 :(得分:0)
它只是允许你并行执行一些代码。
例如:
IEnumerator PrintAfterDelay()
{
yield return new WaitForSeconds(5.0f);
//Rest of the code in this method will execute after 5 seconds while all
all other code will be execute in parallel
Debug.Log("Now I am here after 5 Seconds");
}
例如在Start()中调用它。
void Start()
{
StartCoroutine("PrintAfterDelay");
Debug.Log("I am here");
}
答案 2 :(得分:0)
void Start()
{
//to start a routine
StartCoroutine(A_routine());
//this is same as above
IEnumerator refer_to_A_routine = A_routine();
StartCoroutine(refer_to_A_routine);
}
IEnumerator A_routine()
{
//waits for 0.1 second
yield return new WaitForSeconds(0.1f)
//waits till another_routine() is finished
yield return StartCoroutine(another_routine())
//starts another_routine() there is no wait
StartCoroutine(another_routine())
}