Unity通过WWW类读取硬盘图片、下载网络图片
Unity将本地图片文件显示到Image组件中
代码1,在场景中创建一个空游戏对象,添加本脚本,运行游戏,然后按A键
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShowImage : MonoBehaviour
{
public string filePath = @"file://d:/1.jpg"; //网址
public Texture texture;//贴图
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
StartCoroutine(ReadFile(filePath));
}
}
IEnumerator ReadFile(string filePathValue)
{
WWW ReadFile1 = new WWW(filePathValue);
yield return ReadFile1;
if (ReadFile1.error == null)
{
texture = ReadFile1.texture;
}
}
}

2,如果要把一个Assets中的一个图片显示到一个UI的Image上,必须先把这个图片改为精灵,即Sprite

Sprite类型的1可以拖到Image的Source Image中,普通图片则禁止拖入
精灵图片,有的是合成图,即把多个图合成到一张上,此时会需要用到一个工具2D Sprite,需要自行安装,如下图

这个2D Sprite安装完后要重新打开项目
参考:https://www.bilibili.com/video/BV1Ng4y157sN/?spm_id_from=333.337.search-card.all.click&vd_source=1e7fe4cf32e0dc77c402668041d23eff
代码3,加载Assets/images/3.png(实测可用)
在场景中增加一个UI/Image,然后把以下脚本添加到此Image上,在Assets/images/3.png位置放图片。
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public class ImageLoader : MonoBehaviour
{
void Start()
{
byte[] imgBuff = File.ReadAllBytes("Assets/Images/3.png");
Texture2D texture2D = new Texture2D(1, 1);//默认尺寸是多少都无所谓
texture2D.LoadImage(imgBuff);
//获取图片组件
Image img = transform.GetComponent<Image>();
//参数解释 参数1 texture2d 2d纹理,也就是我们加载上来的本地图片 参数2 Rect图片的应用区域,0,0是起始点,如果写成0.5发,0.5f就是中心,width.height是应用这个图片的多大区域(像素),也就是说我们可以对图片进行简单裁剪,我用的是本地图片的宽高,也就是一整张图片 参数3 精灵在图片的什么地方 0.5 0.5是居中
img.sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), new Vector2(0.5f, 0.5f));
//设置尺寸 如果不设置img的尺寸为精灵的大小,精灵可能会拉伸变形,这种设置尺寸方法要求锚点为一个点
img.GetComponent<RectTransform>().sizeDelta = new Vector2(texture2D.width, texture2D.height);
}
}
解释代码如下:
这段代码是一个用于在 Unity 中加载本地图片并显示到 UI 上的脚本。
首先,在 Start() 函数中,首先使用 File.ReadAllBytes() 来读取文件路径为 "Assets/Images/3.png" 的图片,并将其以字节数组的形式存储在 imgBuff 变量中。
接下来,通过实例化 Texture2D 对象来创建一个空的 2D 纹理对象 texture2D。在这里,传递给 Texture2D 构造函数的参数 (1, 1) 是默认的尺寸值,没有具体的含义,因为后面会使用 texture2D.LoadImage() 方法来根据实际图片数据自动调整纹理的尺寸。
然后,使用 texture2D.LoadImage(imgBuff) 方法将从文件中读取的图片数据加载到纹理上。
接下来是获取 Image 组件。通过 transform.GetComponent<Image>() 获取当前物体(挂载了该脚本的物体)上的 Image 组件,该组件用于显示图片。
然后,使用 Sprite.Create() 方法来创建一个精灵 sprite,作为 Image 组件的显示内容。这个方法需要三个参数:第一个参数是 texture2D,即我们加载进来的本地图片的纹理;第二个参数是 Rect,表示图片的应用区域,包括起始点和宽高,在这里使用的是整个图片的区域;第三个参数是精灵在图片中的位置,其中 (0.5f, 0.5f) 表示居中。
最后,通过 img.GetComponent<RectTransform>().sizeDelta 来设置 Image 组件的尺寸,以确保图片的显示不会被拉伸变形。这里使用的尺寸是 texture2D 的宽高。
这样,当脚本被执行时,在指定的文件路径下读取图片,并将其显示在挂载该脚本的物体上的 Image 组件中。

如图,脚本加到Image上是可以的;
我曾尝试把脚本加到一个空物体上,没有成功;

浙公网安备 33010602011771号