[UE] 데이터 레지스트리

🍥 개요

Data Table을 쓰면서 해당 데이터에 접근하려면 쓰는 곳마다 참조를 해 주어야 하는데 데이터에 글로벌하게 접근할 수 있는 방법은 없을까? 하는 생각으로부터 시작하여 Data Registry를 사용하게 됨.


🍥 Data Registry

[언리얼 엔진의 데이터 레지스트리 ∥ 언리얼 엔진 5.6 문서 Epic Developer Community] (https://dev.epicgames.com/documentation/ko-kr/unreal-engine/data-registries-in-unreal-engine)

장점

  • Data Table과 같은 데이터 에셋을 통합할 수 있음
    • 분량과 같은 문제로 카테고리를 여러 개 나누어 관리하나 탐색은 통합하여 이루어져야 할 때 유용
    • 예를 들어, 스킬이란 큰 카테고리 안에서 클래스 별로 나눠야 함 그러나 어빌리티 부여할 때 모든 클래스를 순회하여 조건에 따라 분류된 어빌리티만 부여하도록 해야 함 이럴 때 여러 데이터 에셋을 한 데 모을 수 있음
  • 데이터 에셋을 직접 참조하지 않아도 되어 의존성을 줄임
  • 빠른 속도, 적은 코스트

주의점

  • Data Table처럼 모든 데이터를 가지고 와 순회하면서 필터링하는 기능은 현재까지 찾지 못함
  • 특정 Data를 가져오는 데에 특화된 것으로 보임

🍥 데이터 레지스트리 세팅

1. Plugin

  • 해당 프로젝트에 Data Registry 이름의 플러그인을 추가

2. Project Settings

  • Project Settings - Game - Data Registry 에서 Directories to Scan 추가
  • Data Registry를 탐색하는 경로를 추가하여야 함 해당 경로를 기준으로 순회

3. Data Registry Asset

  • 데이터 테이블과 같은 관련 에셋을 제작한 후 진행
  • Data Registry 에셋을 생성
  • Registry Type : 데이터 레지스트리를 구분하는 기준
  • Item Struct : 다룰 데이터 구조체
  • Data Source : 선행으로 제작한 에셋들 추가

🍥 코드

// 레지스트리 구분할 프로퍼티 설정
FDataRegistryId RegistryId;
RegistryId.RegistryType = FDataRegistryType("Ability");
RegistryId.ItemName = AbilityTags.First().GetTagName();

// 레지스트리에서 데이터 뽑기
const FAbilityData* OutData = UDataRegistrySubsystem::Get()->GetCachedItem<FAbilityData>(RegistryId);

  if (OutData)
  {
  // ... 처리
  }

Categories:

Updated:

Leave a comment