UE5 Data Registry 시스템
Data Registry란
섹션 제목: “Data Registry란”Data Registry는 UE5에서 여러 DataTable과 CurveTable을 단일 인터페이스로 통합 관리하는 시스템입니다. 에셋 참조 없이 FDataRegistryId로 데이터를 조회하고, 비동기 로드를 지원합니다.
플러그인 활성화: Edit → Plugins → Data Registry 활성화
DataTable 준비
섹션 제목: “DataTable 준비”// 행 구조체 정의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를 행 타입으로 지정합니다.
Registry 설정
섹션 제목: “Registry 설정”프로젝트 설정 → Data Registry 또는 Blueprint에서:
UDataRegistry에셋 생성- Sources 추가: DataTable 에셋 연결, 네임스페이스 지정
FDataRegistryId형식:{RegistryType}:{RowName}
Registry Type: ItemSource: DT_Items (DataTable)→ 조회 ID: Item:Sword, Item:ShieldC++에서 동기 조회
섹션 제목: “C++에서 동기 조회”#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);}Blueprint에서 조회
섹션 제목: “Blueprint에서 조회”Get Item from Data Registry ├─ Registry Type: Item ├─ Item Name: "Sword" └─ Out Item Data → Break FItemDataGetItemFromDataRegistry 함수를 Blueprint에서 직접 호출할 수 있습니다.
캐시 정책 설정
섹션 제목: “캐시 정책 설정”// Registry 에셋 설정CacheSizeBytes = 1024 * 1024; // 1MB 캐시bKeepAliveItems = false; // 미사용 항목 자동 해제DataRegistry vs DataTable 직접 접근
섹션 제목: “DataRegistry vs DataTable 직접 접근”| 항목 | DataTable 직접 | Data Registry |
|---|---|---|
| 에셋 참조 | 하드 레퍼런스 필요 | ID만으로 조회 |
| 소스 통합 | 단일 테이블 | 여러 테이블 통합 |
| 비동기 로드 | 수동 처리 | 내장 지원 |
| 런타임 추가 | 불가 | 소스 동적 추가 가능 |
- Data Registry는 여러 DataTable을
FDataRegistryId로 통합 조회 GetCachedItem으로 동기,AcquireItem으로 비동기 접근- 에셋 하드 레퍼런스 없이 데이터에 접근해 메모리 관리 유연성 향상
- 소스를 런타임에 동적으로 추가할 수 있어 DLC/패치에 적합