UN4L6——WWW类
UN4L6——WWW类
本章代码关键字
1 | WWW //Unity提供给我们简单的访问网页的类,我们可以通过该类下载和上传一些数据 |
WWW
WWW
是Unity提供给我们简单的访问网页的类,我们可以通过该类下载和上传一些数据
在使用http协议时,默认的请求类型是Get
,如果想要Post
上传,需要配合下节课学习的WWWFrom类使用
它主要支持的协议如下:
-
http://
和https://
超文本传输协议 -
ftp://
文件传输协议(但仅限于匿名下载) -
file://
本地文件传输协议,可以使用该协议异步加载本地文件(PC、IOS、Android都支持)
Unity中的WWW类比使用C#中的Http、FTP相关类更加的方便,建议大家使用Unity当中为我们封装好的类来处理下载、加载相关逻辑
注意:
- 该类一般配合协同程序使用
- 该类在较新Unity版本中会提示过时,但是仍可以使用,新版本将其功能整合进了UnityWebRequest类(之后讲解)
WWW类的常用方法和变量
-
常用方法
-
WWW()
:构造函数,用于创建一个WWW请求1
WWW www = new WWW("http://192.168.1.106/Http_Server/下载测试.png");
-
GetAudioClip()
:从下载数据返回一个音效切片AudioClip对象1
AudioClip clip = www.GetAudioClip();
-
LoadImageIntoTexture()
:用下载数据中的图像来替换现有的一个Texture2D对象1
2Texture2D texture = new Texture2D(100, 100);
www.LoadImageIntoTexture(texture); -
LoadFromCacheOrDownload()
:从缓存加载AB包对象,如果该包不在缓存则自动下载存储到缓存中,以便以后直接从本地缓存中加载参数一是AB包文件地址,参数二是版本,该方法多用于Unity网页游戏上,端游或者手游一般会直接提前下载AB包准备使用
1
WWW.LoadFromCacheOrDownload("http://192.168.1.106/Http_Server/test.assetbundle", 1);
-
-
常用属性
-
assetBundle
:如果加载的数据是AB包,可以通过该变量直接获取加载结果1
AssetBundle ab = www.assetBundle;
-
audioClip
:如果加载的数据是音效切片文件,可以通过该变量直接获取加载结果注:老版本内才能使用
audioClip
属性,新版已经改为了使用GetAudioClip()
获取1
www.audioClip
-
bytes
:以字节数组的形式获取加载到的内容1
byte[] bytes = www.bytes
-
bytesDownloaded
:获取已下载的字节数1
int downloadBytesNum = www.bytesDownloaded;
-
error
:返回一个错误消息,如果下载期间出现错误,可以通过它获取错误信息如果没有问题,它将一直为
null
1
if (www.error != null) { }
-
isDone
:判断下载是否已经完成注意,该方法不能判断下载是否出错!
1
if (www.isDone) { }
-
movie
:如果下载的视频,可以获取一个MovieTexture
类型结果注:老版本内才能使用
movie
属性,新版已经改为了使用GetMovieTexture()
再注:其返回值
MovieTexture
也是几乎淘汰的旧视频播放方案1
www.GetMovieTexture()
-
progress
:下载进度1
float progress = www.progress;
-
text
:如果下载的数据是字符串,以字符串的形式返回内容1
www.text
-
texture
:如果下载的数据是图片,就直接以Texture2D的形式返回加载结果1
Texture2D tex = www.texture;
-
利用WWW类来异步下载或加载文件
下载HTTP服务器上的内容
使用WWW
类来异步下载文件非常简单,首先在实例化WWW
对象时传入该资源在http服务器上的地址
然后就可以使用yield return
直接返回www
对象将协程挂起,即可等到资源下载完毕后继续执行协程的逻辑
我们可以通过error
属性是否为空来判断下载是否出错,之后使用www
对象对应的方法或者属性获取资源即可
1 | public RawImage image; |
除了直接yield return www
对象本身,还可以每帧检测是否下载完毕,期间就可以输出下载字节数与进度
1 | public RawImage image; |
下载FTP服务器上的内容(FTP服务器一定要支持匿名账户)
如果想要WWW
类能够访问FTP服务器上的内容,该FTP服务器一定要支持匿名账户登入!
从FTP服务器上下载内容的逻辑,基本与从Http服务器上下载内容一致,
唯一的不同就是在实例化WWW
对象时传入的地址是ftp://...
格式的
1 | public RawImage image; |
本地内容加载(一般移动平台加载数据都会使用该方式)
该方法常用于移动平台加载本地的数据
从本地加载内容的逻辑,基本与从Http服务器和Ftp服务器上下载内容一致,
唯一的不同就是在实例化WWW
对象时传入的地址是 file:// + 本地文件路径
格式的
1 | public RawImage image; |