协程
协程概念的理解
- 与方法一样,协程也是有一种程序组件。
- 相对于一般方法而言,方法只有一个入口,而协程可以有多个入口和出口点,可以用协程实现任何的方法
- 协程更适合实现合作式多人物,迭代器,无线列表
- 开始一个协程时,执行从被调用方法的起始处开始;然而,接下来的每次协程被调用时,从协程返回的地方的位置的接着执行
- 协程是单线程的
- Update 中使用协程必须使用StratCoroutin方法,并不能直接使用
Unity中协程的实现
IEnumerator 接口 提供迭代
StratCoroutine 开启协程(在调用带有协程的方法时使用)
StopCoroutine(string)(只能停止以StartCoroutin("协程方法名")开启的协程)
StopAllCoroutine()停止本对象中开启的所有协程
yield return xxxx 指定下一次迭代入口
xxxx的使用
- WaitForFixedUpdate(在FixedUpdate后执行)
适合于物理控制 - null、0、WaitForSeconds在每帧Update后执行
适合于分多帧完成一个任务,如A*路径计算 - WaitForEndOfFrame在每帧结束后执行
适合于每帧末尾执行的操作,如相机的控制 - WWW 在请求结束后执行
适合于网络下载数据
StratCoroutin的使用方法
1.StartCoroutine(fuction())
调用方法
2.StartCoroutine(“fuction”)
调用字符串的名称
3.StartCoroutine(“fuction”,object obj)
使用object类型
使用协程的注意点
- 在程序中调用StopCorouting()方法只能终止以字符串形式启动的协程
- 多个协程可以同时运行,它们会根据各自的启动顺序来更新
- 协程可以嵌套任意多层
- 如果让多个脚本访问一个协程,定义静态的协程
- 协程不是多线程,他们运行在同一线程中,和普通的脚本一样
- 如果程序需要大量的计算,可以考虑在一个随时间进行的协程中处理它们
- IEnumerator类型的方法不能带ref或者out型的参数
- 目前在Unity中没有简便的方法来检测作用于对象的协程数量以及具体是那些协程作用在对象上。
使用协程的好处
使unity中的方法使用起来更灵活,可以在多帧去执行。