콘텐츠로 이동

UE5 Data Registry 시스템

Data Registry는 UE5에서 여러 DataTable과 CurveTable을 단일 인터페이스로 통합 관리하는 시스템입니다. 에셋 참조 없이 FDataRegistryId로 데이터를 조회하고, 비동기 로드를 지원합니다.

플러그인 활성화: Edit → Plugins → Data Registry 활성화

// 행 구조체 정의
USTRUCT(BlueprintType)
struct FItemData : public FTableRowBase {
GENERATED_BODY()
UPROPERTY(EditAnywhere) FText DisplayName;
UPROPERTY(EditAnywhere) float BaseDamage;
UPROPERTY(EditAnywhere) int32 MaxStack;
UPROPERTY(EditAnywhere) TSoftObjectPtr<UTexture2D> Icon;
};

에디터에서 DataTable 에셋 생성 후 FItemData를 행 타입으로 지정합니다.

프로젝트 설정 → Data Registry 또는 Blueprint에서:

  1. UDataRegistry 에셋 생성
  2. Sources 추가: DataTable 에셋 연결, 네임스페이스 지정
  3. FDataRegistryId 형식: {RegistryType}:{RowName}
Registry Type: Item
Source: DT_Items (DataTable)
→ 조회 ID: Item:Sword, Item:Shield
#include "DataRegistrySubsystem.h"
void UItemManager::GetItemData(FName ItemId) {
UDataRegistrySubsystem* Registry = UDataRegistrySubsystem::Get();
if (!Registry) return;
FDataRegistryId RegistryId(TEXT("Item"), ItemId);
const FItemData* Data = Registry->GetCachedItem<FItemData>(RegistryId);
if (Data) {
UE_LOG(LogTemp, Log, TEXT("아이템: %s, 공격력: %.1f"),
*Data->DisplayName.ToString(), Data->BaseDamage);
}
}

에셋이 아직 로드되지 않았을 때 비동기로 요청합니다.

void UItemManager::AsyncGetItemData(FName ItemId) {
UDataRegistrySubsystem* Registry = UDataRegistrySubsystem::Get();
FDataRegistryId RegistryId(TEXT("Item"), ItemId);
FDataRegistryItemAcquiredCallback Callback;
Callback.BindLambda([this](const FDataRegistryAcquireResult& Result) {
if (Result.Status == EDataRegistryAcquireStatus::InitialAcquireFinished) {
const FItemData* Data = Result.GetItem<FItemData>();
if (Data) OnItemDataLoaded(*Data);
}
});
Registry->AcquireItem(RegistryId, Callback);
}
Get Item from Data Registry
├─ Registry Type: Item
├─ Item Name: "Sword"
└─ Out Item Data → Break FItemData

GetItemFromDataRegistry 함수를 Blueprint에서 직접 호출할 수 있습니다.

// Registry 에셋 설정
CacheSizeBytes = 1024 * 1024; // 1MB 캐시
bKeepAliveItems = false; // 미사용 항목 자동 해제
항목DataTable 직접Data Registry
에셋 참조하드 레퍼런스 필요ID만으로 조회
소스 통합단일 테이블여러 테이블 통합
비동기 로드수동 처리내장 지원
런타임 추가불가소스 동적 추가 가능
  • Data Registry는 여러 DataTable을 FDataRegistryId로 통합 조회
  • GetCachedItem으로 동기, AcquireItem으로 비동기 접근
  • 에셋 하드 레퍼런스 없이 데이터에 접근해 메모리 관리 유연성 향상
  • 소스를 런타임에 동적으로 추가할 수 있어 DLC/패치에 적합