关于Unity协程(Coroutine)与.Net原生多线程

时间:2021-07-02 20:08:34

协程官方doc解释
A coroutine is a function that can suspend its execution(yield) until the given given YieldInstruction finishes.

StartCoroutine开启协程 先执行协程中的代码 碰到yield return时控制权交给unity引擎
引擎继续做接下来的工作例如第一次yield return之后执行StartCoroutine下一行代码
直到满足yield指令的要求才会重新进入协程中的yield点


unity像是做如下的事情:
IEnumerator r = someCoroutine;
while (r.MoveNext())
{
while (!GetYieldCondition(r.Current))
{
//do other things
}
}

 

另外Invoke和InvokeRepeat实际上都是协程,并不是多线程

在unity里边使用.Net多线程做一些事情是非常好的,比如解压资源 更新资源等。
因为单开线程的话 不会影响主线程卡顿,这样UI就不会卡了。
但是开的线程里边不能执行unity主线程的mono代码。线程启动后,执行完毕自动结束该线程、可以同时启动多个线程做事。