【Unity】Texture下载、保存、加载

代码块

网络下载图片

// 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。

image

有个博客中说 www 直接使用可能会有内存泄漏,笔者这里没有使用过,所以请读者自行查询

资料来源:https://blog.csdn.net/thinbug/article/details/103510504

image

这个是官网的 UnityWebRequest 中关于 Texture 下载的代码

详情可见:

Unity2019.4_WebRequestTexture

image

需要注意的是,这里只支持用一部分格式,图上的是 2019 版本的支持,更加详细的支持可以自行查阅资料

我的理解

这种下载在我看来是迫不得已的情况下采用的方式.

我认为更好的加载方式是将需要的图片打包为AB包,之后用加载AB包的方式去加载。

因为这样在下载后不需要太多的考虑图片压缩格式设置,以及下载后资源的处理。并且可以与其余AB包一同去处理

posted @   皮卡味月亮  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示