[Unity]폴더안에 저장된 파일 이름 불러오기

jh Seo·2023년 2월 11일
0

유니티

목록 보기
22/50

개요

해당 맵의 이름을 파일이름으로 저장 후
이름들을 불러와 배열에 저장할 일이 필요해서 이것저것 찾아보다가
폴더안의 파일이름들을 불러오는 방법을 찾아서 정리해두었다.

방법

기본적으로 폴더를 Killing, Sneaking, miniBoss로 나누고,
해당 폴더마다 Easy, Normal, Hard로 폴더를 나눠서
해당 폴더에 맵 프리팹을 저장한 상황이다.

  	const string basePath = "Assets~";
  	string[] type = { "Killing", "Sneaking", "MiniBoss" };
    string[] diff = { "Easy", "Normal", "Hard" };
    string tmpPath="";

    public List<string>[] killing;
    public List<string>[] sneaking;
    public List<string>[] miniBoss;

basePath에 Assets/로 시작해서 원하는 폴더 위치까지 적어준 후,
맵이름을 저장할 killing리스트의 배열, sneaking리스트의 배열, miniboss리스트의 배열을 생성해줬다.

    private void Awake()
    {
        killing = new List<string>[3];
        for(int i = 0; i < 3; i++)
        {
            killing[i] = new List<string>();
        }
        sneaking = new List<string>[3];
        for (int i = 0; i < 3; i++)
        {
            sneaking[i] = new List<string>();
        }
        miniBoss = new List<string>[3];
        for (int i = 0; i < 3; i++)
        {
            miniBoss[i] = new List<string>();
        }

Awake함수에서 리스트배열들을 할당을 해준 후,

 for (int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
            	//원하는 파일 위치까지 위의 스트링배열을 통해 불러와준다.
                tmpPath = basePath +"/" +type[i]+"/"+ diff[j];
                if (System.IO.Directory.Exists(tmpPath))
                {
                    System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(tmpPath);
                    foreach (var item in di.GetFiles())
                    {
                        if (item.Extension == ".meta") continue;
                        string tmp = item.Name;
                        tmp = tmp.Substring(0, tmp.Length - item.Extension.Length);
                        switch (i)
                        {
                            case 0:
                                killing[j].Add(tmp);
                                break;
                            case 1:
                                sneaking[j].Add(tmp);
                                break;
                            case 2:
                                miniBoss[j].Add(tmp);
                                break;
                        }
                    }
                }
            }
        }

위에 미리 나눠놓은 type배열과 diff배열을 통해 원하는 파일의 위치까지
basePath에 /를 붙이며 추가해준다.

그 후, di.GetFiles()로 불러온 해당 폴더의 파일들을 foreach문으로
순회한다.

각 파일은 .prefab파일과 .meta파일 두개로 생성이 되어있다.
확장자가 .meta라면 패스하고, .prefab이라면 확장자이름을 스트링값에서 빼서
해당 파일의 이름을 읽어올 수 있다.

profile
코딩 창고!

0개의 댓글