版本是2018\3\14
先上例子:
public void ShowStars()
{
//print(birds.Count);
StartCoroutine("Show");
}
IEnumerator Show()
{ f
for (int i = 0; i < birds.Count + 1; i++)
{
yield return new WaitForSeconds(0.2f);
stars[i].SetActive(true);
}
}
这份代码主要用到了协程
StartCoroutine("Show");
启动一个名为Show的协程
yield return new WaitForSeconds(0.2f);
等待0.2秒后执行后续代码
个人认为协程的好处在于能够把工作量很大的代码分配到几桢去完成,而不是一定要在一帧中等待全部操作执行完毕后再进入下一帧,以解决画面卡顿等问题
常用的协程操作:
//开启协程:
1.StartCoroutine("Test");
2.StartCoroutine("Test2",1);//只能传一个Object类型的参数
3.StartCoroutine(Test());
4.StartCoroutine(Test2(1));//可以传很多参数
//停止协程:
1.StopCoroutine("Test");
2.StopCoroutine("Test2");
//对于1、2两种开启协程的方式可以用上面1、2介绍的方式停止,也可以用下面3、4的方式停止
3.Coroutine c = StartCoroutine(Test());
StopCoroutine(c);
4.Coroutine c = StartCoroutine(Test2(1));
StopCoroutine(c);
//对于3、4两种方式开启的协程只能用上面3、4两种方式停止
协程的更多操作可以看下这篇博客:Unity中协程(IEnumerator)的使用方法介绍_悲欢离合的博客-CSDN博客_unity 协程函数
对于上面那篇博客的一点纠正和补充:
WaitForEndOfFrame表示协程是跟在LateUpdate之后执行的,WaitForFixedUpdate表示协程是跟在FixedUpdate之后执行的
协程的原理及它和线程区别:unity 协程原理与线程的区别_IT你我-CSDN博客_协程和线程的区别
再说下协程和异步加载场景的区别:异步加载是Unity另开了一个线程进行加载(线程和协程的区别),它们在一定程度上都能缓解场景加载卡顿的问题
其它问题:
当一个协程执行完毕时,利用StartCoroutine返回的代表该协程的值不会改变,要自己手动置为空
有错误欢迎指出