Unity 从服务器下载图片保存本地然后下次读取

由于项目需要 我们的活动的图片太大了 所以每次从后台加载每张图片都好大 所以出现了这么个需求


首先需要搞明白的是Unity的几个路径问题 :

1 Application.dataPath 

2 Application.streamingAssetsPath

3 Application.persistentDataPath

建议可以参考雨松的http://www.xuanyusong.com/archives/3229 这篇文章 里面讲的很清楚 涉及到了 安卓和IOS的路径的问题 只有第三种存储的路径是不区分平台的  所以这里选择了第三种

public string PathFile{
get{ 
//安卓和IOS通用的路径 更新游戏不移除里面的内容
path=Application.persistentDataPath;
path = path.Substring (0,path.LastIndexOf ("/"));
return path;
}
}

获取绝对的路径


然后就是根据URL下载图片 然后保存图片

WWW www = new WWW (userActivityData.img_Link);


yield return www;


if (www.error != null) {


} else {
myTexture.mainTexture = www.texture;
myTexture.height = 622;
myTexture.width = 446;
Texture2D texture = www.texture;
byte[] pngData = texture.EncodeToPNG ();
File.WriteAllBytes (pictureName, pngData);
}

获取图片

if (System.IO.File.Exists (pictureName)) {
// File.ReadAllBytes (pictureName);
// Texture2D tex = (Texture2D)Resources.Load (pictureName);
// myTexture.mainTexture = tex;
// myTexture.height = 622;
// myTexture.width = 446;
// string loadFile="file://
// WWW www=new WWW("file://"+pictureName);
// yield return www;
//
// Texture2D texture = www.texture;
//
// myTexture.mainTexture = texture;


//坑爹的www  一直加载不进来 还是写了一个原生的io流,路径加载文件流
FileStream fileStream = new FileStream (pictureName, FileMode.Open);
fileStream.Seek (0, SeekOrigin.Begin);
byte[] bytes = new byte[fileStream.Length];
//读取byte文件
fileStream.Read (bytes, 0, (int)fileStream.Length);
fileStream.Close ();
fileStream.Dispose ();
fileStream = null;


int width = 446;
int height = 622;
Texture2D texture = new Texture2D (width, height);
texture.LoadImage (bytes);


myTexture.mainTexture = texture;


运行  成功

你可能感兴趣的:(手机游戏)