Coroutines Unity

问题描述:

我想了解c#中协程的语法(因为它接缝对我来说真的很不寻常......)。Coroutines Unity

当我们这样做:

yield return new WaitForSeconds(2.0f); 

Firstable:我理解这句话的目的,而不是语法。

WaitForSeconds类代表什么?它应该是IEnumerator类型的,因为这是函数的返回类型。但根据文档http://docs.unity3d.com/ScriptReference/WaitForSeconds-ctor.html,这没有返回类型,它是一个收益指令(在那里很困惑)

那么这个收益的目的是什么?案件 ?

为什么我们将它与return关键字混合?

提前致谢。

+2

正在写一个答案,但基本上它应该结束是这个网站的复制粘贴: http://twistedoakstudios.com/blog/Post83_coroutines-more-than-you-want-to-know 我假设你知道协程是怎么做的,为什么它可以是有用的,否则那个链接将毫无用处。 – GameDeveloper 2014-09-04 18:09:26

+0

你应该刚刚添加这个答案;) – ryanscottmurphy 2014-10-30 22:47:23

使用yield return调用将创建一个正在返回的类型的IEnumerable。这允许调用函数在计算结束时处理值列表,而不是一次处理所有值,就像刚刚返回集合一样。

在Unity3d中,这很重要,因为绘制循环基本上都发生在单个线程上,因此您可以使用协程和yield return语法在脚本内嵌套行为。

新的WaitForSeconds(...)调用允许执行上下文在一段时间内返回到外部调用者,同时处理空操作有效地暂停该MonoBehaviour的执行,而不暂停整个绘制线程。

它只是允许你并行执行一段代码。

例如:

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"); 
}