当前位置:   article > 正文

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

unity读取外部文件

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

一、具体逻辑

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

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

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

4.用代码在unity里创建一个图片

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

二、逻辑实现部分

读取部分(1,2,3条):
  1. void Start()
  2. {
  3. string[] fileName ; //建一个string存所有的名字
  4. //获取应用里"streamingAssetsPath/0"文件夹下得文件名称
  5. fileName = Directory.GetFiles((Application.streamingAssetsPath + "/0"));
  6. //如果获取到了,把和图片有关的挑出来
  7. if (fileName.Length != 0)
  8. {
  9. for (int i = 0; i < fileName.Length; i++)
  10. {
  11. //获取文件的后缀,把是图片的挑出来并加载出来
  12. string tmp = Path.GetExtension(fileName[i]);
  13. if (tmp == ".jpg" || tmp == ".png" || tmp == ".gif" || tmp == ".bmp")
  14. {
  15. StartCoroutine(ReadPictureName(fileName[i])); //加载的方法,在下文
  16. }
  17. }
  18. }
  19. }
加载图片部分(4条):

加载图片部分(5条):
  1. //加载图片
  2. public Image image;//在外面创建的图片拖进来
  3. IEnumerator ReadPictureName(string url) {
  4. //“在url这个地址下有个图片,请下载下来”这件事写成一个要求
  5. UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
  6. yield return request.SendWebRequest(); //把上面这个要求发出去,并等待结果
  7. //如果下载已经完成
  8. if (request.isDone) {
  9. if (request.isNetworkError || request.isHttpError) //如果网络错误,或者地址错误
  10. {
  11. Debug.Log(request.error); //输出这个错误
  12. }
  13. else //如果没错
  14. {
  15. //建一个2D图片,把request里的图片下载下来放进去
  16. Texture2D texture2d = DownloadHandlerTexture.GetContent(request);
  17. //建一个sprite格式的图片,把下载下来的图片转换格式,放进去;
  18. 括号里分别是(转换的对象,转换出来的图片的坐标,和宽高,
  19. 设置物体自身的坐标原点位置,00就是左下角,0.5,0.5就是中间,1,1就是右上角)
  20. Sprite sprite = Sprite.Create(texture2d, new Rect(0, 0, texture2d.width, texture2d.height), new Vector2(0.5f, 0.5f));
  21. //把Image里的图片替换掉
  22. image.sprite = sprite;
  23. }
  24. }
  25. }

三、补充需求

我有一个文件夹,文件夹里有很多文件夹,我希望把每一个文件夹里的图片都读出来

重点语法:获取地址下所有文件夹的地址

string[] p = Directory.GetDirectories(path);

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

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

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

3.读取这些图片

四、补充需求的代码

  1. using System.IO;
  2. using UnityEngine;
  3. using UnityEngine.Networking;
  4. public class Tool_ReadPics : MonoBehaviour
  5. {
  6. string path;
  7. public List<Sprite> sprites;
  8. void Start()
  9. {
  10. path = Application.streamingAssetsPath + "/photos";
  11. StartCoroutine(ReadFolders(path));
  12. }
  13. IEnumerator ReadFolders(string path) {
  14. //获取path下的所有地址
  15. string[] allPath = Directory.GetFiles(path);
  16. //判断这些地址是否是图片格式
  17. foreach (string singlePath in allPath)
  18. {
  19. if(Path.GetExtension(singlePath)==".jpg"
  20. || Path.GetExtension(singlePath) == ".png")
  21. {
  22. yield return StartCoroutine(GetImageFromIO(singlePath));
  23. }
  24. }
  25. //获取地址下所有文件夹的地址
  26. string[] p = Directory.GetDirectories(path);
  27. if (p.Length == 0)
  28. {
  29. }
  30. else
  31. {
  32. foreach (string p0 in p)
  33. {
  34. yield return StartCoroutine(ReadFolders(p0));
  35. }
  36. }
  37. }
  38. //读取图片
  39. IEnumerator GetImageFromIO(string path) {
  40. UnityWebRequest request = UnityWebRequestTexture.GetTexture(path);
  41. yield return request.SendWebRequest();
  42. if (request.isDone)
  43. {
  44. if (request.isNetworkError || request.isHttpError)
  45. {
  46. Debug.Log(request.error);
  47. }
  48. else
  49. {
  50. Texture2D texture2d = DownloadHandlerTexture.GetContent(request);
  51. Sprite sprite = Sprite.Create(texture2d, new Rect(0, 0, texture2d.width, texture2d.height), new Vector2(0.5f, 0.5f));
  52. sprites.Add(sprite);
  53. }
  54. }
  55. }
  56. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/103533
推荐阅读
相关标签
  

闽ICP备14008679号