代码块
网络下载图片
// 2017之后推荐使用UnityWebRequest
IEnumerator DownloadTexture(string url){
WWW www = new WWW (url);
yield return www;
if (www.isDone) {
texture = www.texture;
}
}
保存图片到本地
void SaveTexture(){
string savePath = Application.persistentDataPath + "/test.png";
// 文件流方式存储本读文件
FileStream fs = new FileStream(savePath, FileMode.Open);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
}
从本地加载图片并使用
void LoadTexture(){
string savePath = Application.persistentDataPath + "/test.png";
// 使用文件流读取本地图片文件
FileStream fs = new FileStream(savePath, FileMode.Open);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
// 创建texture并设置图片格式,4通道32位,不使用mipmap
texture = new Texture2D(1, 1, TextureFormat.ARGB4444, false);
var iSLoad = texture.LoadImage(buffer);
texture.Apply();
// 创建精灵,中心点默认(0, 0)
Sprite sprite = Sprite.Create (texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
}
合起来之后的逻辑
//1.检查当前是否存在缓存,如果存在,从缓存中加载(适用于使用频率高的资源)
//2.检查本地是否存在,如果存在,从本地加载
//3.缓存与本地都不存在,从网络中下载到本地,下载后存到本地,然后从本地加载。
//4.如果下载后的图片不用做其他处理的话,第三步中可以直接缓存与加载。
先说一下最终的代码,对基础知识了解的可以不用看下面了
基础知识
先大概介绍一下 www 或者 UnityWebRequest 这两种 Unity 常用的下载方式。
这个是官网的 www 下载,是 5.6 版本的 Unity。
有个博客中说 www 直接使用可能会有内存泄漏,笔者这里没有使用过,所以请读者自行查询
资料来源:https://blog.csdn.net/thinbug/article/details/103510504
这个是官网的 UnityWebRequest 中关于 Texture 下载的代码
详情可见:
需要注意的是,这里只支持用一部分格式,图上的是 2019 版本的支持,更加详细的支持可以自行查阅资料
我的理解
这种下载在我看来是迫不得已的情况下采用的方式.
我认为更好的加载方式是将需要的图片打包为AB包,之后用加载AB包的方式去加载。
因为这样在下载后不需要太多的考虑图片压缩格式设置,以及下载后资源的处理。并且可以与其余AB包一同去处理
标签:www,fs,buffer,texture,Unity,Texture,new,加载 From: https://www.cnblogs.com/pkmoon/p/18234690