首页 理论教育在WWW类与协程中的结果分析

在WWW类与协程中的结果分析

【摘要】:本小节介绍的是Unity中的WWW类与协程。用0或者null来yield的意思是告诉协程等待下一帧,直到继续执行为止。2)协程注意事项在程序中调用StopCoroutine()方法只能终止以字符串形式启动(开始)的协程。协程可以嵌套任意多层。4)协程优点跨平台。7)WWW类可以简单地访问Web页面。你开始在后台下载通过调用WWW,返回一个新的WWW对象。8)WWW类常用属性

本小节介绍的是Unity中的WWW类与协程。

1)什么是协程?

(1)Unity的协程系统是基于C#的一个简单而强大的接口

(2)简单讲,协程就是可以把一个方法拆分成多次执行的一种接口。

注意:StopCoroutine只能停止以字符串方式开启的协程。

当你“yield”一个方法时,你相当于说,“现在停止这个方法,然后在下一帧中从这里继续开始!”。用0或者null来yield的意思是告诉协程等待下一帧,直到继续执行为止。

2)协程注意事项

(1)在程序中调用StopCoroutine()方法只能终止以字符串形式启动(开始)的协程。

(2)多个协程可以同时运行,它们会根据各自的启动顺序来更新。

(3)协程可以嵌套任意多层。

(4)协程不是多线程(尽管它们看上去是这样的),它们运行在同一线程中,跟普通的脚本一样。

(5)IEnumerator类型的方法不能带ref或者out型的参数,但可以带被传递的引用。

3)协程,线程的区别

(1)线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。

(2)协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。

(3)协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力。

4)协程优点

(1)跨平台。(www.chuimin.cn)

(2)跨体系架构

(3)无需线程上下文切换的开销。

(4)无需原子操作锁定及同步的开销。

(5)方便切换控制流,简化编程模型。

(6)高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

5)缺点

(1)无法利用多核资源:协程的本质是个单线程,它不能同时将单个CPU的多个核用上,协程需要和进程配合才能运行在多CPU上。当然我们日常所编写的绝大部分应用都没有这个必要,除非是CPU密集型应用。

(2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序:这一点和事件驱动一样,可以使用异步IO操作来解决。

6)什么是AssetBundle

AssetBundle是从Unity项目中打包出来的资源文件,可用于资源的更新等。AssetBundle支持3种格式的压缩选择,分别是LZMA、LZ4、无压缩。默认是LZMA格式的压缩,但是这样虽然可以使资源文件大小大大缩小,利于下载,但是也有不利的一面,在使用时会先解压再使用,所以会造成加载时间过长。

不压缩格式资源包会比较大,但是加载时不需要解压,所以加载时会更快。

7)WWW类

(1)可以简单地访问Web页面。

(2)这是一个小工具模块检索url的内容。

(3)你开始在后台下载通过调用WWW(url),返回一个新的WWW对象。

(4)你可以检查isDone属性来查看是否已经下载完成,或者yield自动等待下载物体,直到它被下载完成(不会影响游戏的其余部分)。

8)WWW类常用属性