unity 文件流读取图片与www读取图片的区别介绍
作者:贪玩的孩纸时代 发布时间:2023-08-30 09:10:37
标签:unity,文件流,读取图片,www
IO流代码:
void LoadByIO() {
float time = Time.time;
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
fs.Seek(0, SeekOrigin.Begin);
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, (int)fs.Length);
fs.Close();
fs.Dispose();
fs = null;
Texture2D t = new Texture2D(1,1);
t.LoadImage(bytes);
img.texture = t;
Debug.Log("IO读取图片用时:" + (Time.time-time));
}
WWW代码:
IEnumerator LoadByWWW() {
float time = Time.time;
WWW w = new WWW("file://" + path);
yield return w;
if (string.IsNullOrEmpty(w.error) == false)
{
Debug.Log("error");
}
else {
img1.texture = w.texture;
}
Debug.Log("www读取图片用时:" + (Time.time - time));
}
结果截图:
补充:unity加载文件的方法-用加载图片举例
一、用Resources.Load()方法
1、把图片(转换或者不转换为sprite都可)放在Resources里
Texture2D imgTexture = Resources.Load("background_one") as Texture2D;
Sprite sprite = Sprite.Create(imgTexture, new Rect(0, 0, imgTexture.width, imgTexture.height), new Vector2(0.5f, 0.5f));
Image image = GetComponent<Image>();
image.sprite = sprite;
2、把图片转换成sprite,放在Resources
//Resources.Load加载图片默认的是Texture2D类型,加了typeof(Sprite)后,就是加载为sprite类型
//然后又转换为object,所以要再用as Sprite转换为Sprite,
//如果不加typeof(Sprite),它就是Texture2D转换为object,就不成强制转换为Sprite
Image image = GetComponent<Image>();
image.sprite = Resources.Load("background_one", typeof(Sprite)) as Sprite;
二、创建对应文件的public变量,然后再unity里把图片拖给变量赋值
public Sprite play;
public Sprite pause;
Image image = GetComponent<Image>();
image.sprite = play;
image.sprite = pause;
三、用WWW方式,既可以加载网络资源,也可以加载本地资源
//用www方式读取
string path = @"E:\UnityProject\ARVR\Workspace\Test2\Assets\texture\background_one.png";
WWW www = new WWW(path);
Texture2D texture = www.texture;
Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
Image image = GetComponent<Image>();
image.sprite = sprite;
注意:用www加载,最好使用协程,等待图片加载完毕
四、用传统IO流
//创建文件读取流
string path = @"E:\UnityProject\ARVR\Workspace\Test2\Assets\texture\background_one.png";
FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
fileStream.Seek(0, SeekOrigin.Begin);
byte[] bye = new byte[fileStream.Length];
fileStream.Read(bye, 0, bye.Length);
fileStream.Close();
//创建texture
Texture2D texture2D = new Texture2D(240, 144);
texture2D.LoadImage(bye);
//创建sprite
Sprite sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), new Vector2(0.5f, 0.5f));
Image image = GetComponent<Image>();
image.sprite = sprite;
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/yiwei151/article/details/79444738


猜你喜欢
- 前言:本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。一.最常见方式(未必最
- 简介使用 SpringBoot 配置 FTP 服务器,上传、删除、下载文件。配置 FTP检查是否安装 vsftpdrpm -qa | gre
- 在实践中,项目的某些配置信息是需要进行加密处理的,以减少敏感信息泄露的风险。比如,在使用Druid时,就可以基于它提供的公私钥加密方式对数据
- 简单工厂模式:由一个工厂对象决定创建出哪一种类的实例。1.抽象类public abstract class People { p
- @EqualsAndHashCode注解@EqualsAndHashCode注解的作用就是自动实现model类的equals方法和hashc
- 目录一、图示二、链表的概念及结构三、单链表的实现四、完整代码的展示一、图示二、链表的概念及结构 链表是一种物理存储结构上非连续存储结构,数据
- 本文实例为大家分享了DataGridView带图标的单元格实现具体代码,供大家参考,具体内容如下目的:扩展 C# WinForm 自带的表格
- 前言:List 去重指的是将 List 中的重复元素删除掉的过程。此题目考察的是对 List 迭代器、Set 集合和 JDK 8 中新特性的
- 1.封装什么是封装,谈谈自己对封装的理解,封装就是将类的信息(比如说类的属性)隐藏在类的内部,不允许外部程序直接访问。此时就要提到一个关键字
- 本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下结构体版的学生成绩管理系统主要功能有按1 输入学生信息按2
- 本文给大家介绍Activity的生命周期,如果大家学习过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController
- JdbcTemplate概述它是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了
- springboot aop里的@Pointcut()的配置@Pointcut("execution(public * com.w
- 一、什么是委托呢?听着名字挺抽象,确实不好理解。面试官最喜欢考察这个,而且更喜欢问:“委托和事件有何异同?”。如果对一些知识点没有想明白,那
- 一、简介ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:Task支持线程的
- 二叉树的分类(按存储结构)树的分类(按存储结构) &nbs
- 前 言App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式:使用SharedPrefe
- 前言RecyclerView几乎在每个app里面都有被使用,但凡使用了列表就会采用分页加载进行数据请求和加载。android 官方也推出了分
- 我们知道,编写一个Java程序后,如果想让自己编写的代码可以正常运行,我们便需要对它进行编译和运行,而Java环境变量的配置就显得尤为重要,
- 本文实例为大家分享了C#根据http和ftp地址获取对应图片的具体代码,供大家参考,具体内容如下public class GetBitmap