【Unity网络编程知识】Unity的 WWW相关类学习
一、WWW类
1、WWW类的作用
WWW是Unity提供的简单的访问网页的类,可以通过该类下载和上传一些数据,在使用http协议时,默认的请求类型是Get,如果想要Post上传,需要配合WWWFrom类使用
主要支持的协议
- 1.http://和https://超文本传输协议
- 2.ftp://文件传输协议(但仅限于匿名下载)
- 3.file://本地文件传输协议,可以使用该协议异步加载本地文件(PC、IOS、Android都支持)
注意
- 1.该类一般配合协同程序使用
- 2.该类在较新unity版本中会提示过时,但是仍可以使用,新版本将其功能整合进了UnityWebRequest类
2、WWW类的常用方法
2.1 WWW() 构造函数,用于创建一个WWW请求
WWW www = new WWW("http://192.168.1.25:8000/HttpServer/http上传的文件.jpg");
2.2 GetAudioClip() :从下载数据返回一个音效切片AudioClip对象
www.GetAudioClip();
2.3 LoadImageIntoTexture() :用下载数据中的图像来替换现有的一个Texture2D对象
Texture2D tex = new Texture2D(100, 100);www.LoadImageIntoTexture(tex);
2.4 LoadFromCacheOrDownload() :从缓存加载AB包对象,如果该包不在缓存则自动下载存储到缓存中,以便以后直接从本地缓存中加载
WWW.LoadFromCacheOrDownload("a", 1);
3、WWW类的常用变量
3.1 assetBundle:如果加载的数据是AB包,可以通过该变量直接获取加载结果
www.assetBundle;
3.2 bytes:以字节数组的形式获取加载到的内容
www.bytes
3.3 bytesDownloaded:过去已下载的字节数
www.bytesDownloaded
3.4 error:返回一个错误消息,如果下载期间出现错误,可以通过它获取错误信息
www.error != null
3.5 isDone:判断下载是否已经完成
www.isDone
3.6 progress:下载进度
www.progress
3.7 text:如果下载的数据是字符串,以字符串的形式返回内容
www.text
3.8 texture:如果下载的数据是图片,以Texture2D的形式返回加载结果
www.texture
4、利用www类来异步下载或加载文件
4.1 下载HTTP服务器上的内容
StartCoroutine(DownLoadHttp());IEnumerator DownLoadHttp(){//1.创建WWW对象WWW www = new WWW("https://t7.baidu.com/it/u=2604797219,1573897854&fm=193&f=GIF");//2.就是等待加载结束//yield return www;while (!www.isDone){print(www.bytesDownloaded);print(www.progress);yield return null;}print(www.bytesDownloaded);print(www.progress);//3.使用加载结束后的资源if (www.error == null){//www.textureimage.texture = www.texture;}else{Debug.LogError(www.error);}}
4.2 下载FTP服务器上的内容(FTP服务器一定要支持匿名账户)
StartCoroutine(DownLoadFtp());IEnumerator DownLoadFtp(){//1.创建WWW对象WWW www = new WWW("ftp://127.0.0.1/计算机网络思维导图.png");//2.就是等待加载结束//yield return www;while (!www.isDone){print(www.bytesDownloaded);print(www.progress);yield return null;}print(www.bytesDownloaded);print(www.progress);//3.使用加载结束后的资源if (www.error == null){//www.textureimage.texture = www.texture;}else{Debug.LogError(www.error);}}
4.3 本地内容加载(一般移动平台加载数据都会使用该方式)
StartCoroutine(DownLoadLocal());IEnumerator DownLoadLocal(){//1.创建WWW对象WWW www = new WWW("file://" + Application.streamingAssetsPath + "/test.png");//2.就是等待加载结束//yield return www;while (!www.isDone){print(www.bytesDownloaded);print(www.progress);yield return null;}print(www.bytesDownloaded);print(www.progress);//3.使用加载结束后的资源if (www.error == null){//www.textureimage.texture = www.texture;}else{Debug.LogError(www.error);}}
二、WWWForm类
1、WWWForm类的作用
- 如果想要使用wwW上传数据时,就需要配合wwWFrom类进行使用了,而WWWFrom主要就是用于集成数据的,我们可以设置上传的参数或者2进制数据,当结合wwWFrom上传数据时,它主要用到的请求类型是Post,它使用Http协议进行上传处理
注意:
- 使用WWW结合WWWFrom上传数据一般需要配合后端程序制定上传规则
2、WWWFrom类的常用方法和变量
2.1 WWWForm() :构造函数
WWWForm data = new WWWForm();
2.2 AddBinaryData() :添加二进制数据
data.AddBinaryData()
2.3 AddField() :添加字段
data.AddField("Name", "MrTang", Encoding.UTF8);data.AddField("Age", 99);
3、WWW结合wwWForm对象来异步上传数据
StartCoroutine(UploadData());IEnumerator UploadData(){WWWForm data = new WWWForm();data.AddField("Name", "MrTang", Encoding.UTF8);data.AddField("Age", 99);WWW www = new WWW("http://192.168.1.25:8000/HttpServer/", data);yield return www;if(www.error == null){print("上传成功");}else{print("上传失败");}}