해당 맵의 이름을 파일이름으로 저장 후
이름들을 불러와 배열에 저장할 일이 필요해서 이것저것 찾아보다가
폴더안의 파일이름들을 불러오는 방법을 찾아서 정리해두었다.
기본적으로 폴더를 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이라면 확장자이름을 스트링값에서 빼서
해당 파일의 이름을 읽어올 수 있다.