1.Unity的多线程无法调用关键数据:tranform
2.Unity的底层实现了线程池,如资源加载
协程:
yield return的介绍:
yield return null;//下一帧在执行后续代码
yield return 0;//下一帧在执行后续代码
yield break;//直接结束该协程的后续操作
yield return asyncoperation;//等异步操作结束后再执行后续代码
yield return StartCoroution(某个协程);//等待某个协程执行完毕再执行后续代码
yield return WWW();//等待WWW操作完成后再执行后续代码
yield return new WaitForEndOfFrame();//等所有的摄像机和Gui渲染完成后再该帧显示在屏幕之前执行
yield return new WaitForScends(0.3f);//等待0.3秒,在所有的Update函数调用之后执行(受Time.timeScale影响)
yield return new WaitForSecondsReaItime(0.3f);//等待0.3秒,同上(不受Time.timeScale影响)
yield return WaitFourFixedUpdate();//等待下一次FixedUpdate开始时再执行后续代码
yield return new WaitUntil();//当输入的参数或者委托为True时
yield return new WaitWhile();//当输入的参数或者委托为false时
物体不激活停止协程,脚本不激活协程不停止
所有的协程执行后续代码必须要在当前循环结束如:
While(true)
{
for(int i=0;i<2;i++)
{
Debug.log(123);
yield return null;
}
Debug.log(12);
yield return new WaitForSeconds(2);
}
打印顺序为123 123 12
协程开启和关闭的方法:第一种:
开启:StartCoroutine("Test"); 关闭:StopCoroutine("Test");
开启:StartCoroutine("Test2",1); 关闭:StopCoroutine("Test2");
开启:StartCoroutine(Test3()); 关闭:Coroutine c = StartCoroutine(Test3()); StopCoroutine(c)
开启:IEnumrator coroutine = Test(); StartCoroutine(coroutine ); 关闭:StopCoroutine(coroutine);
4.StopAllCoroutines()
可以停掉当前脚本的所有Coroutine.