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

news/2025/3/15 7:22:43/文章来源:https://www.cnblogs.com/pkmoon/p/18234690

代码块

网络下载图片

// 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位,不使用mipmaptexture = 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包一同去处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720908.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法金 | 再见!!!KNN

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」KNN算法的工作原理简单直观,易于理解和实现,这使得它在各种应用场景中备受青睐。 我们将深入探讨KNN算法,从基本概念到实现细节,从算法优化到实际应用,我们都会一一…

苹果macOS系统U盘版/恢复版基础安装教程

目前,刻录U盘进行安装是主流选择,这样安装调试好的黑苹果macOS问题最少,也较为稳定。镜像恢复安装的方式,某宝上的远程安装的商家都是这么干的,但是其中很大一部分商家存在一个严重问题:macOS 从10.14 开始全面采用了 APFS 文件系统,但是当时的恢复软件无法支持这个文件…

[操作系统] MenuetOS :最轻量的、非Linux的、开源操作系统

1 MenuetOS 概述1.1 简介MenuetOS是一款由英国软件工程师Ville Mikael Turjanmaa和Madis Kalme开发的、开放源码的32/64位操作系统。 该系统完全由x86汇编语言在2000年编写完成。 MenuetOS的设计目标是去除操作系统编程中的复杂化和错误部分,具有轻量级、高性能和强大的功能等…

IT-Tools.Tech: 助力开发人员和IT工作者!

IT-Tools.Tech: 为开发者提供便捷的在线工具it-tools.techIT-Tools.Tech[1] 是一个专为开发者设计的在线工具平台,提供了多种实用的开发工具,帮助简化工作流程,提高工作效率。平台上的工具涵盖了从文本处理、编码解码到图像处理等多方面需求,满足不同开发任务的要求。 主要…

手机版 - imessage信息群发,苹果imessages短信,imessages推信,苹果手机推信,苹果imessage群发实现原理

Apple公司全线在mac os与ios两个操作系统上内置了FaceTime与iMessage两个应用。完美替代运营商的短信与电话。并且FaceTime与iMessage的帐号不仅仅与Apple ID 绑定,同时也与使用这Apple ID的手机号码绑定,这样的漏洞自然给无孔不入的群发垃圾信息商们提供了后门。这样iPhone的…

Web 网页性能及性能优化

Web 网页性能及性能优化 一、Web 性能 Web 性能是 Web 开发的一个重要方面,侧重于网页加载速度以及对用户输入的响应速度 通过优化网站来改善性能,可以在为用户提供更好的体验 网页性能既广泛又非常深入 1. 为什么性能这么重要? 1. 性能关乎留住用户 性能对于任何在线业务都…

C# .NET 6 使用WorkFlow Core 创建工作审批流

1,背景工作流思想在上世纪60年代就有人提出过;70年代就有人开始尝试,但是由于当时许多的限制,工作流一直没有成功的被实现;80年代才出现第一批成功的工作流系统;90年代工作流技术走向了第一个发展高峰期;90年代后至今工作流出现了很多版本,但是主旨还是不变的,为了使我…

简单实现Viper配置管理

本文由 ChatMoney团队出品简介 前面实现的一个简易suno-api。是使用cookie来获取suno-token发起请求的。当时并没有通过配置的方式来获取cookie,而是直接在代码中写死了cookie的值,这种做法并不好,所以现在打算把cookie值改造为一个配置,通过viper来读取。 什么是viper Vipe…

全局 type 类型的寻找 typescript 类型 - fabric.Canvas

全局 type类型的寻找 typescript 类型 - fabric.Canvas declare type ExtCanvas = fabric.Canvas & {isDragging: boolean;lastPosX: number;lastPosY: number; };这个代码 没有定义 fabric.Canvas,然后看看提示说在namespace定义了。这个是子项目,没有type定义,上父项目…

Linux中sed命令b选项屏蔽指定的处理区域

001、Linux中sed命令b选项屏蔽指定的处理区域[root@pc1 test2]# ls a.txt [root@pc1 test2]# cat a.txt ## 测试数据 1 01 02 a 2 03 04 a 3 05 06 a 4 07 08 5 09 10 k 6 11 12 a 7 13 14 8 15 a i 9 17 18 a [root@pc1 test2]# sed 1,3b; s/a/Q/ a.tx…

SwiftUI 热门开源库推荐第1期 - 凡人程序猿 - iOS开发

大家好,我是凡人程序猿。周末给大家分享几个我在用已久的 GitHub 开源库,这些开源库使用简单,功能强大,使用好它们能够为我们节省大量的开发时间。大家好,周末给大家分享几个我在用已久的 GitHub 开源库,这些开源库使用简单,功能强大,使用好它们能够为我们节省大量的开…

初探堆栈欺骗之静态欺骗

本文首发先知社区:https://xz.aliyun.com/t/14487 首先介绍一下堆栈欺骗的场景,当我们用一个基本的 shellcode loader 加载 cs 的 shellcode,在没有对堆栈做任何事情时,我们的堆栈是不干净的,我们去看一下堆栈时会发现有很多没有被解析的地址在其中,这显然是不正常的,因…