首页 > 其他分享 >【Unity】Texture下载、保存、加载

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

时间:2024-06-06 13:10:59浏览次数:24  
标签:www fs buffer texture Unity Texture new 加载

代码块

网络下载图片

// 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包一同去处理

标签:www,fs,buffer,texture,Unity,Texture,new,加载
From: https://www.cnblogs.com/pkmoon/p/18234690

相关文章

  • el-select懒加载
    注册selectLoadmore指令   loadMore(){   //如果没有更多数据,则不请求   if(!this.hasMore){    return;   }   //如果intercept属性为true则不请求数据,   if(this.loadMore.intercept){    return; ......
  • Unity通过shader实现图像转像素画
    新建一个无光照shader(我选择了Create->Shader->UnlitShader),命名为:PixelateShader,双击打开它,粘贴以下内容Shader"Custom/PixelateShader"{Properties{_MainTex("Texture",2D)="white"{}_PixelSize("PixelSize......
  • python 直接加载egg 文件的模块
    主要作为一个简单记录参考示例文件模式importsysimportosegg_path=os.path.join(os.path.dirname(__file__),'dist','mydalong-0.1-py3.11.egg')sys.path.append(egg_path)fromdemoimportdalongdalong.login()文件夹模式......
  • Android Audio模块 音量增益 framework到HAL 层加载流程
    目录背景概念AndroidAudio调用流程(app-framework-HAL)标记0libaudioclient标记1libaudioclient:aps变量赋值标记1.1binder变量赋值标记2audiopolicy标记4audiopolicy:mAudioPolicyManager变量赋值标记5audiopolicy标记6audiopolicy:mpClientInterface变量赋值标......
  • TexQ: Zero-shot Network Quantization with Texture Feature Distribution Calibrati
    我们使用以下这六个标准对网络量化和相关领域的研究进行分类。以下是每个标准的详细解释,并结合了参考文献中的相关研究:研究领域:该标准将研究大致分为三个主要领域:量化:这是上传论文的核心焦点。它涉及减少模型参数的位宽(例如,从32位浮点数到4位整数)等技术,以压缩模型并提......
  • Unity中的物体移动
    在Unity中,Rotate和Translate是Transform组件的两个方法,它们用于改变游戏对象的空间位置和方向。Rotate方法Rotate方法用于围绕游戏对象的局部坐标系中的轴或围绕世界坐标系中的轴旋转游戏对象。这个方法有多个重载版本,允许你以不同的方式指定旋转。局部旋转transform.R......
  • 【Unity】Vector3的方法
    属性和方法作用normalized使用Vector3.normalized的一个常见场景是在物理模拟中,比如计算速度向量或在射线投射(Raycasting)中确定射线的方向。LerpVector3.Lerp在Unity中非常常用,尤其是在动画和游戏逻辑中,用于平滑地过渡从一个状态到另一个状态,例如角色移动、颜色渐变......
  • 【Unity美术】spine软件的使用—2D动画的制作
    ......
  • vue动态加载组件import引入组件找不到组件(Error: Cannot find module)
    更多ruoyi-nbcio功能请看演示系统gitee源代码地址前后端代码:https://gitee.com/nbacheng/ruoyi-nbcio演示地址:RuoYi-Nbcio后台管理系统http://218.75.87.38:9666/更多nbcio-boot功能请看演示系统 gitee源代码地址后端代码:https://gitee.com/nbacheng/nbcio-boot前端......
  • 【实用技巧】Unity中的Image组件
    Unity中的Image组件是UI系统的核心部分,用于显示图像和纹理。以下是一些关于UnityImage组件的实用技巧:使用Sprite作为Image源:将Sprite直接拖拽到Image组件的SourceImage字段中,可以快速设置显示的图像。调整颜色和透明度:通过修改Image组件的Color属性,可以改变显示图像的颜......