协同统一

时间:2014-09-04 17:37:46

标签: unity3d coroutine

我想了解c#中coroutines的语法(因为它对我来说真的很不寻常......)。

当我们做类似的事情时:

yield return new WaitForSeconds(2.0f);

Firstable:我理解这个陈述的目标,但不理解语法。

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

那么在这种情况下收益的目的是什么?

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

提前感谢。

3 个答案:

答案 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())
    }