我知道它用于WaitUntil或WaitSeconds之类的延迟,但它的实际用途是什么。
答案 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 synchronization
和who did what first
)。
大多数统一代码都在main thread
上,虽然可以统一multi-threading
,但只有main thread
才有可用的统一api (我相信新的ecs
)会很快改变其中一些。
无论如何,这是什么意思?
这意味着,如果您希望执行代码在some time in the future
执行,或执行non-blocking
操作(即ui代码或http请求......基本上是用户必须执行的任何操作{{1}要完成一项行动,你需要一些方法来解决这个问题。应用响应。
wait
利用coroutines
和callbacks
等方式为您提供这种力量。
无论如何,还有其他原因我现在没有列出因为我无法想到它们但是closures
很强大而且我发现自己经常使用它们(双关语,哈哈)许多不同的任务。