定义
协程使得任务的执行可以分配到多个帧中完成,在Unity中,协程从开始执行到第一个yield return 语句后将调用权归还Unity主线程,并在紧随的下一帧继续从上次结束调用的代码上下文位置恢复执行。
常见应用场景
HTTP请求、资源加载和文件I/O等长时间的异步操作等。
在Unity中常见于动画控制、延迟执行、渐变效果、事件触发、特定间隔的循环执行、等待用户输入、平滑移动、逐帧处理大量数据和动态生成对象等。
注意事项
1.避免阻塞协程,因为这会增加Unity主线程在CPU上所耗费的时间。
2.协程依附的游戏对象被通过SetActive方法禁用时,协程也会停止。当游戏对象通过Destroy被销毁时会立刻触发OnDisable方法,然后Unity会有效地停止协程,在当前帧结束时调用OnDestroy方法。值得注意的是,通过enabled=false禁用对象,不会停止协程。
3.启用协程时的内存压力等于固定开销的分配加上局部变量的大小。
4.如果需要每帧运行并且长时间运行不会执行到yield语句的协程,改用Update或者LateUpdate是更好的选择。
5.嵌套协程会带来更高的内存开销,因为需要跟踪对象。
6.应尽量将一系列操作压缩到尽量少的协程中。
总结自官方英文文档
示例
使用示例1
该示例旨在探索协程在网络请求方面的应用,我们将模拟通过协程下载几张网络图片并在UI界面中进行显示,在这个示例中我们会使用到三个协程,一个主协程和两个子协程,子协程分别用于下载和加载图片资源,主协程用于控制两个子协程的启动。负责下载图片的协程会将所有图片资源下载并保存在本地磁盘,负责加载图片的协程会将本地磁盘的图片加载至内存中并赋值给对应的Image组件,先下载后加载。
使用示例2
该示例旨在探索协程在逐张图片下载和加载方面的应用,不同于示例1,该示例中将以一张图片为单位,先进行下载然后进行加载,这么做可以使得用户在UI界面上能够实时浏览图片,例如当需要获取大量图片资源时,示例1在下载图片时就需要用户等待较长时间,而本示例则会每下载一张图片就立刻加载一张,这样可以让用户提前浏览图片。同时示例2并不会直接下载和加载所有图片资源,而是由用户通过按钮交互来切换图片,仅当用户切换后才会下载和加载新的图片资源。
使用示例3
该示例演示了协程在轮播图中的应用,该示例全程自动下载和加载图片资源,同时会自动对图片进行轮播,除此之外图片资源的下载和加载过程会以进度条的方式进行展现。
百度网盘(提取码:1314)
如果这篇文章对你有帮助,请给作者点个赞吧!