본문 바로가기

개인적인 팁

언리얼5 특정폴더 Asset 목록 가져오기

개발하다 보면 DataTable 폴더내부의 Asset들을 자동으로 가져와서 로드하고 싶은 경우가있다. (자동화)

 

#include "Misc/FileHelper.h"

 

FString SearchFolder = TEXT("DataTable");
TArray<FString> FoundFiles;
FindFilesInFolder(SearchFolder, FoundFiles);
void FindFilesInFolder(const FString& SearchFolder, TArray<FString>& FoundFiles)
{
    IFileManager& FileManager = IFileManager::Get();

    FString RootFolder = FPaths::ProjectContentDir() + SearchFolder;
    
    // 파일경로
    const FString SearchPattern = FString::Printf(TEXT("%s/*.uasset"), *RootFolder);

    // 파일 긁오기
    FileManager.FindFilesRecursive(FoundFiles, *RootFolder, *SearchPattern, true, false);

    // /Game/.../이름.이름 으로 LoadObject 하기 편하도록 변경
    for (FString& CurFile : FoundFiles)
    {
       FString FilePath = CurFile;
       //파일 이름만 뽑는다.
       FString FileName;

       int32 LastIndex = FilePath.Find(".uasset");
       FileName = FilePath.Left(LastIndex);
       int32 FirstIndex = -1;
       if (FileName.FindLastChar('/', FirstIndex) == false)
          continue;

       FileName = FileName.RightChop(FirstIndex + 1);

       CurFile = TEXT("/Game/") + SearchFolder + TEXT("/") + FileName + TEXT(".") + FileName;
    }
}

 

결과