WWW下载
通常情况下使用www类下载跟协程不分家,这里简单的理解一下我的浅见,协程是嫁接在主程序上的一种程序,需要跟线程区分,其实是主程序的一种,可以使用 ·StartCoroutine("MethodName"),来开启一个协程,
www类是我们常用的下载类,主要是介绍里面的几种下载方法,
- WWW www = new WWW(url); 这是一种ByteBuffer传输,属于长连接,大部分游戏都是使用这种方式,具体的优缺点不是很了解,所以详细内容请自行了解。
- WWW www = new WWW(url,WWWForm) 这是一种WWWForm传输,属于短链接,大部分的社交软件在使用,具体的优缺点不是很了解,所以详细内容请自行了解。
- WWW.LoadFromCacheOrDownload(url,(int)version),这个跟ByteBuffer传输是一样的,但是这个会保留一个缓存在电脑中,当你进行了下载,再次下载的时候就会读取缓存,所以速度跟效率都比较好些。
我这里主要是处理从网络上下载的图片保存到目录中,并在需要的时候load出来,附上工程代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
public class DemoLoad : MonoBehaviour {
private Image mImage;
private Button mDownBtn;
private GameObject mCanvas;
private string mSavePath;
private string mUrl = "http://xxx.xxxx.xxx/%E6%A8%AA%E7%AB%96%E7%89%88.png";
// Use this for initialization
void Start () {
mCanvas = GameObject.Find("Canvas");
mDownBtn =mCanvas.transform.Find("Button").GetComponent<Button>();
mImage = mCanvas.transform.Find("Image").GetComponent<Image>();
mDownBtn.onClick.AddListener(Down);
mSavePath = Application.dataPath+"/DownLoadDemo/Resources/Image/picture.jpg";
}
void Down(){
StartCoroutine("DownUrl");
}
IEnumerator DownUrl(){
WWW www = WWW.LoadFromCacheOrDownload(mUrl,1);
yield return www;
Texture2D texture= www.texture;
byte[] bytes = texture.EncodeToPNG();
File.WriteAllBytes(mSavePath,bytes);
mImage.sprite = Sprite.Create(texture,new Rect(0,0,texture.width,texture.height),new Vector2(0,0));
}
}