// header
UCLASS()
class PROJECT_API URAssetManager : public UAssetManager
{
GENERATED_BODY()
public:
URAssetManager();
static URAssetManager& Get();
};
// cpp
URAssetManager::URAssetManager() : Super()
{
}
URAssetManager& URAssetManager::Get()
{
if(URAssetManager* Singleton = Cast<URAssetManager>(GEngine->AssetManager))
{
return *Singleton;
}
UE_LOG(LogTemp, Fatal, TEXT("Can't find URAssetManager"));
return *NewObject<URAssetManager>();
}// header
class UInputAction;
class UInputMappingContext;
// GameplayTag에 대응되는 Action 1개를 갖고있는 구조
USTRUCT()
struct FRInputAction
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly)
FGameplayTag InputTag = FGameplayTag::EmptyTag;
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UInputAction> InputAction = nullptr;
};
UCLASS()
class PROJECT_API URInputData : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UInputMappingContext> InputMappingContext;
UPROPERTY(EditDefaultsOnly)
TArray<FRInputAction> InputActions;
};
// header
// 하나의 엔트리로 에셋의 이름, 경로 등을 가지고 있음
USTRUCT()
struct FAssetEntry
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly)
FName AssetName;
UPROPERTY(EditDefaultsOnly)
FSoftObjectPath AssetPath; // 경로를 설정할 수 있는 타입
UPROPERTY(EditDefaultsOnly)
TArray<FName> AssetLabels;
};
// 에셋에 대한 정보를 가지고 있는 FAssetEntry를 배열로 가지고 있음
USTRUCT()
struct FAssetSet
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly)
TArray<FAssetEntry> AssetEntries;
};
/**
*
*/
UCLASS()
class PROJECT_API URAssetData : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
private:
// C++의 Unordered_map에 가까움
UPROPERTY(EditDefaultsOnly)
TMap<FName, FAssetSet> AssetGroupNameToSet;
};

