Unity 读取外配-第三集-UnityWebRequest读取外部图片(简单但详细版)

外配系列文章(按需取用):

Unity 读取外配-第一集-网络请求UnityWebRequest读取txt内容_unity获取外部文本文件中文字-CSDN博客Unity 读取外配-第二集-IO.File形式读写txt内容_unity 怎么读取有个txt文件的-CSDN博客Unity 读取外配-第一集-网络请求UnityWebRequest读取txt内容_unity获取外部文本文件中文字-CSDN博客

Unity 读取外配-第三集-网络下载形式读取外部图片(简单但详细版)_unity读取外部文件-CSDN博客

Unity 读取外配-第四集-本地读取(IO.FileStream)形式读取图片_unity filestream-CSDN博客


目录

一、前言

二、读取单个图片步骤

三、单个图片逻辑实现

1.写出地址

 2.读取文件夹下所有文件

3. 筛选图片

4.创建Image

3.将图片放入Image中

四、多个文件夹中的图片读取

1.读取步骤

2.补充需求代码


一、前言

需求:我有一个文件夹,里面有好多好多图片,我想软件自己读出来

我们先学习读取一个图片然后放入Image,再学习读取多个图片。

二、读取单个图片步骤

读取一个图片然后放入Image,拆分出来有以下几步:

1.写出你希望读取的文件夹的地址

2.读取这个文件夹里所有的文件名称

3.把这个文件夹里名称中和图片有关的文件名找出来

4.在unity里创建一个图片

5.用加载的图片替换掉创建的这个图片,并调整大小

三、单个图片逻辑实现

1.写出地址

假设我们希望读取"streamingAssetsPath/0"文件夹下的图片,则,我们的地址为:

Application.streamingAssetsPath + "/0"
 2.读取文件夹下所有文件

读取某地址下的所有文件方法为:Directory.GetFiles(地址);

备注:

Directory的中文意思是目录,在Unity里是个类,这个类里有很多功能。

存储文件、组织文件(就是移动文件)、控制访问权限、搜索和导航等。

//获取应用里"streamingAssetsPath/0"文件夹下得文件名称
fileName = Directory.GetFiles(Application.streamingAssetsPath + "/0");
3. 筛选图片

把这个文件夹里名称中和图片有关的文件名找出来,我们常用的图片文件格式有:jpg、png、gif、bmp,我们通过后缀名筛选出来。

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.创建Image

先创建一个Image(如图1所示)

图1 创建Image
3.将图片放入Image中

用加载的图片替换掉创建的这个图片,并调整大小

 //加载图片
   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.读取步骤

在之前的基础上增加逻辑:

1.获取文件夹内所有的地址

2.如果这些地址的后缀是图片格式

3.读取这些图片

2.补充需求代码
using System.IO;
using UnityEngine;
using UnityEngine.Networking;

public class Tool_ReadPics : MonoBehaviour
{
    string path;
    //建立一个图片List,放入所有读取到的图片
    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);
                //把Texture2D格式转换成sprite格式
                Sprite sprite = Sprite.Create(texture2d, new Rect(0, 0, texture2d.width, texture2d.height), new Vector2(0.5f, 0.5f));
                //把图片加入到sprites的List中
                sprites.Add(sprite);
            }
        }
    }
}
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
Unity可以通过几种方法来读取文件。首先,你需要将CSV文件放入Unity的资源目录下,可以选择放入"Assets/Res"文件夹下。然后,你可以使用以下两种方法之一来读取文件。 方法一:使用Unity的Resources.Load方法。这个方法可以直接从资源目录中加载文件。你可以使用以下代码来读取CSV文件: ```csharp TextAsset csvFile = Resources.Load<TextAsset>("文件名"); string csvText = csvFile.text; ``` 其中,"文件名"是你CSV文件的名称(不包括文件扩展名)。通过这种方式,你可以轻松地将CSV文件的内容读取到字符串变量中。 方法二:使用System.IO命名空间中的StreamReader类。这个类提供了更底层的文件读取功能。你可以使用以下代码来读取CSV文件: ```csharp string filePath = Application.dataPath + "/Res/文件名.csv"; StreamReader reader = new StreamReader(filePath); string csvText = reader.ReadToEnd(); reader.Close(); ``` 其中,"文件名"是你CSV文件的名称(包括文件扩展名)。通过这种方式,你可以手动指定CSV文件的路径,并使用StreamReader类来读取文件内容。 这些方法都可以让Unity读取CSV文件的内容,并将其存储在字符串变量中,以供后续处理和解析使用。请根据你的具体需求选择适合的方法进行文件读取。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Unity进阶技巧 - 从文件读取游戏数据](https://blog.csdn.net/wubaohu1314/article/details/120492170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【100个 Unity实用技能】☀️ | Unity读取本地文件(Json,txt等)的三种方法示例](https://blog.csdn.net/zhangay1998/article/details/126529109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌菌巧乐兹

希望能给大家写更多有用的文章~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值