请参考Unity3D中的许多协程之一?

时间:2015-12-31 18:08:37

标签: c# unity3d coroutine ienumerator

有没有办法让变量指向Unity3D中C#中的一些协同程序?

public class Example : MonoBehaviour
{
    ? something ?  crt;

    private IEnumerator CoroutineA()
    {
    }

    private IEnumerator CoroutineB()
    {
    }

    void Start()
    {
        crt = CoroutineA;
        StartCoroutine(crt);
    }
}

2 个答案:

答案 0 :(得分:4)

您要查找的类型是delegate。委托类似于函数指针,并不特定于Unity3D。

public class Example : MonoBehaviour
{
    private delegate IEnumerator CoroutineDelegate();

    private IEnumerator CoroutineA()
    {
    }

    private IEnumerator CoroutineB()
    {
    }

    public void Start()
    {
        CoroutineDelegate crt = CoroutineA;
        StartCoroutine(crt());
    }
}

答案 1 :(得分:0)

简单地说,使用 StartCoroutine 函数只需要一个 IEnumerator 对象来启动相应的协程。

这意味着您可以创建 IEnumerator 类型的变量并将协程的返回值分配给它们(回想一下协程确实是一个生成器,即返回 IEnumerator)。

然后,只需对变量调用 StartCoroutine。 在您的示例中,字段 crt 的类型应为 IEnumerator。在您的 Start 方法中,您应该像这样分配给它:

crt = CoroutineA();

那么如果你想启动它分配的协程,就这样做:

StartCoroutine (crt);