【Unity】指定したパス内にあるテクスチャのパスをすべて取得する

はじめに

今回は指定しパス内にあるテクスチャのパスをすべて取得する方法を紹介します

環境は Unity 2021.3.25f1です

コード

Directory.GetFilesでパス内にあるファイルを取得できるのでそれを活用します

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public static class StringExtension
{
    /// <summary>
    /// 指定したパス(Assetsからの相対パス)のフォルダ内にあるテクスチャのパス取得
    /// </summary>
    /// <param name="path"></param>
    /// <returns></returns>
    public static List<string> GetTexturePathList(string path)
    {
        List<string> list = new List<string>();
        path = Application.dataPath + "//" + path;
        if (!Directory.Exists(path)) return list;

        string[] png = Directory.GetFiles(path, "*.png", SearchOption.AllDirectories);
        string[] jpg = Directory.GetFiles(path, "*.jpg", SearchOption.AllDirectories);
        string[] jpeg = Directory.GetFiles(path, "*.jpeg", SearchOption.AllDirectories);
        string[] tga = Directory.GetFiles(path, "*.tga", SearchOption.AllDirectories);   
        string[] tif = Directory.GetFiles(path, "*.tif", SearchOption.AllDirectories);    
        string[] tiff = Directory.GetFiles(path, "*.tiff", SearchOption.AllDirectories);  

        list.AddRange(png);
        list.AddRange(jpg);
        list.AddRange(jpeg);
        list.AddRange(tga);
        list.AddRange(tif);
        list.AddRange(tiff);
   
        for (int i = 0; i < list.Count; i++)
        {
            list[i] = list[i].Replace("\\", "/");//¥を/に置き換え
            list[i] = list[i].Replace(Application.dataPath ,"Assets");
        }

        return list;
    }
}

使い方

Assetsからの相対パスを渡すと画像のパスが取得できます

       public string path;
        public void Update()
        {
            if(Input.GetKeyDown(KeyCode.F))
            {
                var l = StringExtension.GetTexturePathList(path);
                for (int i = 0; i < l.Count; i++)
                {
                    Debug.Log(l[i]);
                }

            }
        }