有人可以解释一下StartCoroutine Unity

时间:2018-01-09 11:45:13

标签: c# unity3d

我知道它用于WaitUntil或WaitSeconds之类的延迟,但它的实际用途是什么。

2 个答案:

答案 0 :(得分:0)

根据此处的文件https://docs.unity3d.com/Manual/Coroutines.html

协程就像一个函数,能够暂停执行并将控制权返回给Unity,然后继续在下一帧停止的地方继续。

这意味着你做完之后:

 StartCoroutine(coroutine);

你的程序将执行协程中的内容。

您的coroutine功能如下所示:

IEnumerator Coroutine() {
        yield return new WaitForSeconds(1);
        Debug.Log("Test1234");
}

因此,一旦协程启动,它将等待一秒钟并在控制台上打印" Test1234"然后您的程序将继续正常流程。

请注意,coroutines函数声明的返回类型为 IEnumerator ,并且正文中某处包含 yield return语句, 正如文件所说。

关于实际使用..概括,每次你需要的东西"随着时间的推移" ,coroutine是你的工具。例如,考虑一下"随时间的损害"。

答案 1 :(得分:0)

coroutine允许您在编写读取为asynchronous的代码时实现synchronous构造,但更重要的是不使用任何多线程原语,如locks(简单地说:多线程)引入了另一层复杂性,引入的一些问题的例子是:state synchronizationwho did what first)。

大多数统一代码都在main thread上,虽然可以统一multi-threading,但只有main thread才有可用的统一api (我相信新的ecs)会很快改变其中一些。

无论如何,这是什么意思?

这意味着,如果您希望执行代码在some time in the future执行,或执行non-blocking操作(即ui代码或http请求......基本上是用户必须执行的任何操作{{1}要完成一项行动,你需要一些方法来解决这个问题。应用响应。

wait利用coroutinescallbacks等方式为您提供这种力量。

无论如何,还有其他原因我现在没有列出因为我无法想到它们但是closures很强大而且我发现自己经常使用它们(双关语,哈哈)许多不同的任务。