Unreal5 DataTable 만들기

2025. 10. 15. 21:31·Unreal

복잡한 게임일 수록 데이터가 많아져 일일히 관리하기가 힘들어진다.

그럼 어떻게 관리해야할까?

 

데이터를 모아서 한꺼번에 지정해주기 쉽게 하기 위해선 데이터테이블을 사용할 수 있다!

C++로 데이터테이블을 만들어보자

임의로 레벨의 정보를 전달하는 데이터테이블을 만들어보겠다.

1. DataTable Row 생성

데이터테이블을 만들기 위해선 Row 구조체가 필요하다.

에디터의 좌측 상단에서 새로운 C++ 클래스를 만들어주자

TableRow에 대한 부모는 따로 없으므로 없음을 선택하고 다음을 눌러준다.

.h와 .cpp의 내용을 모두 지워주고

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "MapInfoRow.generated.h"

enum class EMapName : uint8;

USTRUCT(BlueprintType)
struct FMapInfoRow : public FTableRowBase
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName MapName;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	EMapName MapEnum;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	uint8 Id;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FText MapDescription;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TObjectPtr<UTexture2D> MapThumbnail;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	uint8 bIsUnlocked : 1;
};

헤더파일에 필요한 데이터 타입을 채워준다.

2. 블루프린트에서 데이터테이블 생성

visual studio 빌드를 진행한 후

언리얼 에디터의 콘텐츠 브라우저에서 마우스 우클릭으로 메뉴를 열고 기타 > 데이터 테이블을 눌러준다.

여기서 c++로 만들어준 MapInfoRow구조체를 선택해준다.

그럼 이렇게 생성되고 접두사는 보통 DT를 붙여준다.

해당 파일을 열면 위와 같은 창이 뜬다.

상단에 추가 버튼을 눌러서 열을 추가해주자.

그럼 열이 추가되고 아래 열 에디터에서 옵션을 설정할 수 있다.

다음과 같이 선언해주면 에디터를 통해 위에서 설정한 데이터테이블을 설정해 줄 수 있다.

UPROPERTY(EditDefaultsOnly, Category = "ADGameInstance", meta = (RequiredAssetDataTags = "RowStructure=/Script/AbyssDiverUnderWorld.MapDepthRow"))
TObjectPtr<UDataTable> MapInfoTable;

 

3. 데이터테이블 정보 사용하기

3-1. C++

C++에서는 다음과 같이 함수를 통해 이름으로 열을 반환하거나 전체 열을 반환할 수 있다.

FName MapName = "맵 이름";
static const FString Context(TEXT("MapInfoDataTable"));

/*이름으로 열 찾기*/
FMapInfoRow*  MapInfo = MapInfoTable->FindRow<FMapInfoRow>(MapName, Context);
FMapInfoRow*  MapInfo = MapInfoTable->FindRow<FMapInfoRow>(MapName, Text("MapInfoDataTable");

/*전체 열 가져오기*/
TArray<FMapInfoRow*> MapInfoArray;
MapInfoTable->GetAllRow<FMapInfoRow>(TEXT("MapInfoTable"), MapInfoArray);

/*전체 열 순회*/
for(FMapInfoRow* Row : MapInfoArray)
{
	//열의 데이터 사용
}

/*전체 열 배열로 캐시하기(단, Row 구조체에 Id 변수가 있어야 함)*/
TArray<FMapInfoRow*> MapInfoArray;
MapInfoTable->GetAllRow<FMapInfoRow>(TEXT("MapInfoTable"), MapInfoArray);

Algo::Sort(MapInfoArray, [](const FMapInfoRow* A, const FMapInfoRow* B)
{
	return A->Id < B->Id;
}); //Id를 통해 배열 정렬

전체 열을 배열로 캐시해서 데이터테이블에서 설정한 Id 기준으로 정렬을 할 경우 

인덱스를 인자로 받아 열을 반환하는 get 함수도 만들어줄 수 있을 것이다.

 

3-2. 블루프린트 

블루프린트에서는 전체 열을 바로 가져오는 함수는 없고

데이터테이블의 열 이름들 배열을 가져와서 순회 노드를 통해 

RowName으로 열을 찾아 반환하여 사용할 수 있다.

 

맨 위에서 만들어주었던 MapInfoRow 구조체 배열 변수에 해당 열들을 추가하여 주었다.

이는 열을 이름이 아닌 인덱스 번호로 사용하기 위함이다.

다음과 같이 LevelIndex를 받아 해당하는 Map Info Row를 가져오고 

구조체 핀 분할을 통해 필요한 정보들을 Set Level Info의 인자로 넘겨주었다.

'Unreal' 카테고리의 다른 글

Unreal5 드래그 앤 드랍 구현  (0) 2025.06.02
Unreal5 위젯 NativeOn 함수  (0) 2025.06.02
Unreal5 AI제작3_AI NPC에 감각 부여하기  (0) 2025.04.25
Unreal5 AI제작3_AI NPC에 행동 부여하기  (0) 2025.04.23
Unreal5 AI 제작2_상태 머신을 활용한 AI 행동 패턴 설계  (0) 2025.04.22
'Unreal' 카테고리의 다른 글
  • Unreal5 드래그 앤 드랍 구현
  • Unreal5 위젯 NativeOn 함수
  • Unreal5 AI제작3_AI NPC에 감각 부여하기
  • Unreal5 AI제작3_AI NPC에 행동 부여하기
yoosorang
yoosorang
yoosorang 님의 블로그 입니다.
  • yoosorang
    yoosorang 님의 블로그
    yoosorang
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • 게임 개발 (0)
      • TIL (76)
      • Trouble Shooting (7)
      • Unreal (25)
      • Unity (1)
      • C++ (14)
      • 게임 수학 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    언리얼 데이터테이블 블루프린트
    언리얼 데이터테이블
    언리얼5
    UE
    troubleshooting
    언리얼 데이터테이블 C++
    입력 예외 처리
    위젯 애니메이션
    c++열거형
    위젯바인딩
    언리얼
    UE5
    settimer에러
    UnReal
    언리얼 스마트 포인터
    위젯바인딩 변수
    Unreal5
    switch 열거형
    c++에러
    cast this null 에러
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
yoosorang
Unreal5 DataTable 만들기
상단으로

티스토리툴바