공부/Unreal Engine 4

AOS, IOS 어플의 설치 경로에서 파일 읽어오기

Lero God 2022. 9. 29. 00:37

윈도우에선 FFileHelper::LoadFileToString 으로 파일의 스트링을 읽어올 수 있지만
안드로이드나 iOS 에서 파일을 읽으려면 특수한 함수를 이용해야 한다.

안드로이나 iOS 에선 설치된 어플의 경로에서 파일을 가져와야 한다.
안드로이드의 경우 AAssetManager 를 이용해서 앱의 리소스들이 들어있는 assets 폴더의 경로를 가져와야 하고
iOS 의 경우엔 [NSBundle mainBundle] 를 이용해서 어플의 경로인 '어플 이름.app' 의 경로를 가져와야 한다.

플랫폼에 맞게 리소스가 있는 폴더 경로를 가져올 수 있는 함수가 FGenericPlatformMisc::LoadTextFileFromPlatformPackage 함수이다.
각 플랫폼에 맞게 override 해서 사용한다.

 

플랫폼별 override 한 함수는 아래와 같다.

  • 안드로이드 : FAndroidMisc::LoadTextFileFromPlatformPackage
  • iOS : FIOSPlatformMisc::LoadTextFileFromPlatformPackage 

 

파일을 읽어오는 함수 사용 예시 코드는 아래와 같다.

FString SdkConfigPath = FString(FPlatformProcess::BaseDir()) / TEXT("sdkconfig.json");;
FString JsonString;
    
#if PLATFORM_WINDOWS
FFileHelper::LoadFileToString(JsonString, *SdkConfigPath);
#elif PLATFORM_ANDROID
JsonString = FAndroidMisc::LoadTextFileFromPlatformPackage(SdkConfigPath);
#elif PLATFORM_IOS
JsonString = FIOSPlatformMisc::LoadTextFileFromPlatformPackage(SdkConfigPath);
#endif

경로는 플랫폼 패키지 설치 폴더의 특정 경로로부터의 상대 경로를 인수로 넣어줘야 한다.

LoadTextFileFromPlatformPackage 함수 내부 구현을 보면 어떤 방식으로 파일 경로가 결정되는지 볼 수 있다. 안드로이드의 경우 AssetManger 을 이용해 가져온 assets 경로로부터 시작한다. 

FString FAndroidMisc::LoadTextFileFromPlatformPackage(const FString& RelativePath)
{
#if USE_ANDROID_JNI
	AAssetManager* AssetMgr = AndroidThunkCpp_GetAssetManager();
	AAsset* asset = AAssetManager_open(AssetMgr, TCHAR_TO_UTF8(*RelativePath), AASSET_MODE_BUFFER);
    ...
}

iOS 의 경우엔 [NSBundle mainBundle] 를 이용해서 어플의 경로인 '어플 이름.app' 의 경로로부터 시작한다.

 

FString FIOSPlatformMisc::LoadTextFileFromPlatformPackage(const FString& RelativePath)
{
	FString FilePath = FString([[NSBundle mainBundle] bundlePath]) / RelativePath;
    ...
}

'공부 > Unreal Engine 4' 카테고리의 다른 글

에셋의 이동 및 수정  (1) 2023.05.09
Package과 Asset 의 차이  (0) 2023.05.09
Build.cs, Target.cs, .uproject, .uplugin 의 사용성  (0) 2022.08.26
UE4 모듈에 관해서  (0) 2022.08.26
언리얼 엔진에서 dll의 사용성  (0) 2022.08.26