- 유저는 이를 통해 직접 시스템 디렉토리에 접근하지 않아도 에셋 매니저를 통해 내가 원하는 에셋에 접근 가능하다.
GetPrimaryAssetID()
:FPrimaryAssetId(FPrimaryAssetType InAssetType, FName InAssetName)
Project Settings > Asset Manager 탭을 통해 내가 참조하고자 하는 Primary Asset이 있는 디렉토리를 설정한다.
- Priamary Asset Type: 내가 접근할 때 사용할 에셋 타입에대한 이름 정보
- Base Class: 모아두고자 하는 에셋의 Base 클래스
- Directories: 로딩할 에셋이 있는 디렉토리
GetPrimaryAssetId()
함수를 오버라이드 해준다.class ARENABATTLE_API UABItemData : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
virtual FPrimaryAssetId GetPrimaryAssetId() const override
{
return FPrimaryAssetId("ABItemData", GetFName());
}
};
UAssetManager& Manager = UAssetManager::Get();
// 1. Asset Manager 싱글톤 클래스를 얻어온다.
TArray<FPrimaryAssetId> OutAssets;
Manager.GetPrimaryAssetIdList(TEXT("ABItemData"), OutAssets);
// 2. 내가 위에 설정한 Priamary Asset Type에 해당하는 Type정보를 파라미터로 넘겨주면
// 해당하는 에셋들의 리스트들을 넘겨준다.
int32 AccessIdx = 2;
FSoftObjectPtr AssetPtr(Manager.GetPrimaryAssetPath(OutAssets[AccessIdx ]));
// 3. 에셋의 경로를 통해 에셋에 대한 FSoftObjectPtr을 얻어온다.
if(AssetPtr.IsPending())
{
AssetPtr.LoadSynchronous();
// 4. 에셋을 로딩해온다.
}
Item = Cast<UABItemData>(AssetPtr.Get());
// 5. 로딩된 에셋을 사용한다.