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

这篇具有很好参考价值的文章主要介绍了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条):

unity 加载图片,# unity项目常用知识,unity,c#

加载图片部分(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.读取这些图片文章来源地址https://www.toymoban.com/news/detail-518056.html

四、补充需求的代码

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 读取外配-第三集-网络下载形式读取外部图片(简单但详细版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包