协程的两种开启方式
1.StartCoroutine(DoSomething());
2.StartCoroutine(“DoSomething”);
协程关闭
1.StopCoroutine(DoSomething()); //关闭指定协程
2.StopAllCoroutines(); //关闭所有协程
void Start()
{
StartCoroutine(DoSomething());//开启协程的第一种方法
StartCoroutine("DoSomething");//开启协程的第二种方法
}
IEnumerator DoSomething() {
Debug.Log("DoSomething");
yield return null;
}
协程的返回值
协程必须有有返回值,且返回值类型为IEnumrator。返回值语句为yield retuen 表达式或值 或 yield break。
yield:挂起,程序遇到yield关键字时会被挂起,暂停执行,等待条件满足时从当前位置继续执行
yield return 0 or yield return null: 程序在下一帧中从当前位置继续执行
yield return 1,2,3,…: 程序等待1,2,3…帧之后从当前位置继续执行
yield return new WaitForSeconds(float n): 程序等待n秒后从当前位置继续执行
yield return WWW: 等待一个网络请求完成后从当前位置继续执行
yield return StartCoroutine(): 等待一个协程执行完成后从当前位置继续执行
yield new WaitForEndOfFrame(): 在所有的渲染以及GUI程序执行完成后从当前位置继续执行
yield new WaitForFixedUpdate(): 所有脚本中的FixedUpdate()函数都被执行后从当前位置继续执行
yield break:协程执行条件不满足,即不会从当前的位置继续执行协程,将回到函数继续执行。
协程的一些注意地方:
1.多个协程可以同时运行,它们会根据各自的启动顺序来更新;
2.协程可以嵌套任意多层;
3.如果你想让多个脚本访问一个协程,那么你可以定义静态的协程;
4.如果你的程序需要进行大量的计算,那么可以考虑在一个随时间进行的协程中处理它们;
5.IEnumerator类型的方法不能带ref或者out型的参数,但可以带被传递的引用;
6.目前在Unity中不能检测作用于对象的协程数量以及具体是哪些协程作用在对象上。
参考:添加链接描述