本文主要是介绍Unity 读取外配-第三集-网络下载形式读取外部图片(简单但详细版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
需求:我有一个文件夹,里面有好多好多图片,我想软件自己读出来
一、具体逻辑
1.写出你希望读取的文件夹的地址
2.读取这个文件夹里所有的文件名称
3.把这个文件夹里名称中和图片有关的文件名找出来
4.用代码在unity里创建一个图片
5.用加载的图片替换掉创建的这个图片,并调整大小
二、逻辑实现部分
读取部分(1,2,3条):
void Start(){string[] fileName ; //建一个string存所有的名字//获取应用里"streamingAssetsPath/0"文件夹下得文件名称fileName = Directory.GetFiles((Application.streamingAssetsPath + "/0"));//如果获取到了,把和图片有关的挑出来if (fileName.Length != 0){for (int i = 0; i < fileName.Length; i++){//获取文件的后缀,把是图片的挑出来并加载出来string tmp = Path.GetExtension(fileName[i]); if (tmp == ".jpg" || tmp == ".png" || tmp == ".gif" || tmp == ".bmp"){StartCoroutine(ReadPictureName(fileName[i])); //加载的方法,在下文}}}}
加载图片部分(4条):
加载图片部分(5条):
//加载图片public Image image;//在外面创建的图片拖进来IEnumerator ReadPictureName(string url) {//“在url这个地址下有个图片,请下载下来”这件事写成一个要求UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);yield return request.SendWebRequest(); //把上面这个要求发出去,并等待结果//如果下载已经完成if (request.isDone) {if (request.isNetworkError || request.isHttpError) //如果网络错误,或者地址错误{Debug.Log(request.error); //输出这个错误}else //如果没错{//建一个2D图片,把request里的图片下载下来放进去Texture2D texture2d = DownloadHandlerTexture.GetContent(request); //建一个sprite格式的图片,把下载下来的图片转换格式,放进去;括号里分别是(转换的对象,转换出来的图片的坐标,和宽高,设置物体自身的坐标原点位置,00就是左下角,0.5,0.5就是中间,1,1就是右上角)Sprite sprite = Sprite.Create(texture2d, new Rect(0, 0, texture2d.width, texture2d.height), new Vector2(0.5f, 0.5f));//把Image里的图片替换掉image.sprite = sprite;}}}
三、补充需求
我有一个文件夹,文件夹里有很多文件夹,我希望把每一个文件夹里的图片都读出来
重点语法:获取地址下所有文件夹的地址
string[] p = Directory.GetDirectories(path);
在之前的基础上增加逻辑:
1.获取文件夹内所有的地址
2.如果这些地址的后缀是图片格式
3.读取这些图片
四、补充需求的代码
using System.IO;
using UnityEngine;
using UnityEngine.Networking;public class Tool_ReadPics : MonoBehaviour
{string path;public List<Sprite> sprites;void Start(){path = Application.streamingAssetsPath + "/photos";StartCoroutine(ReadFolders(path));}IEnumerator ReadFolders(string path) {//获取path下的所有地址string[] allPath = Directory.GetFiles(path);//判断这些地址是否是图片格式foreach (string singlePath in allPath){if(Path.GetExtension(singlePath)==".jpg"|| Path.GetExtension(singlePath) == ".png"){yield return StartCoroutine(GetImageFromIO(singlePath));}}//获取地址下所有文件夹的地址string[] p = Directory.GetDirectories(path);if (p.Length == 0){}else{foreach (string p0 in p){yield return StartCoroutine(ReadFolders(p0));}}}//读取图片IEnumerator GetImageFromIO(string path) {UnityWebRequest request = UnityWebRequestTexture.GetTexture(path);yield return request.SendWebRequest();if (request.isDone){if (request.isNetworkError || request.isHttpError){Debug.Log(request.error);}else{Texture2D texture2d = DownloadHandlerTexture.GetContent(request);Sprite sprite = Sprite.Create(texture2d, new Rect(0, 0, texture2d.width, texture2d.height), new Vector2(0.5f, 0.5f));sprites.Add(sprite);}}}
}
这篇关于Unity 读取外配-第三集-网络下载形式读取外部图片(简单但详细版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!