using UnityEngine;
using System.IO;
using UnityEngine.UI;
using System.Collections;
public class AsyncImageDownload : MonoBehaviour {
public Sprite placeholder = null;
private static AsyncImageDownload _instance = null;
public static AsyncImageDownload GetInstance() { return Instance; }
public string url = "";
public Image image;
public string path
{
get
{
return Application.persistentDataPath + "/ImageCache/";
}
}
public static AsyncImageDownload Instance
{
get
{
if(_instance == null)
{
GameObject obj = new GameObject("AsyncImageLoad");
_instance = obj.AddComponent<AsyncImageDownload>();
DontDestroyOnLoad(obj);
_instance.Init();
}
return _instance;
}
}
void Start()
{
Init();
SetAsyncImage(url, image);
}
void Update()
{
}
public bool Init()
{
if(!Directory .Exists(Application .persistentDataPath + "/ImageCache/"))
{
Directory.CreateDirectory(Application.persistentDataPath + "/ImageCache/");
}
if(placeholder == null)
{
placeholder = Resources.Load("placeholder") as Sprite;
}
return true;
}
public void SetAsyncImage(string url, Image image)
{
image.sprite = placeholder;
if(!File.Exists(path + url.GetHashCode()))
{
StartCoroutine(DownloadImage(url, image));
}
else
{
StartCoroutine(LoadLocalImage(url, image));
}
}
private IEnumerator DownloadImage(string url, Image image)
{
Debug.Log("downloading new image :" + path + url.GetHashCode());
WWW www = new WWW(url);
yield return www;
Texture2D tex2D = www.texture;
byte[] pngData = tex2D.EncodeToPNG();
File.WriteAllBytes(path + url.GetHashCode(), pngData);
Sprite mSp = Sprite.Create(tex2D, new Rect(0, 0, tex2D.width, tex2D.height), new Vector2(0, 0));
image.sprite = mSp;
}
private IEnumerator LoadLocalImage(string url, Image image)
{
string filePath = "file://" + path + url.GetHashCode();
Debug.Log("getting local image: " + filePath);
WWW www = new WWW(filePath);
yield return www;
Texture2D texture = www.texture;
Sprite mSp = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0, 0));
image.sprite = mSp;
}
}
原文链接 : http://blog.csdn.net/yupu56/article/details/50915306