데이터 테이블과 블루프린트 연동
게임 개발 시 플레이어의 능력치, 아이템 정보, 퀘스트 내용, 몬스터 스탯 등 수많은 데이터를 관리해야 합니다. 이런 데이터를 하드코딩(블루프린트나 코드 내에 직접 값 입력)하거나 일일이 변수로 만드는 것은 비효율적이며, 데이터 변경 시마다 블루프린트를 수정하고 재컴파일해야 하는 번거로움이 있습니다. 또한, 기획자가 직접 데이터를 수정하기 어렵다는 문제도 있습니다.
이러한 문제들을 해결하기 위해 언리얼 엔진은 데이터 테이블(Data Table) 이라는 강력한 기능을 제공합니다. 데이터 테이블은 스프레드시트(Excel, Google Sheets 등)와 유사한 형태로 데이터를 중앙 집중식으로 관리하고, 블루프린트에서 쉽게 접근하여 활용할 수 있게 해줍니다.
데이터 테이블이란 무엇인가?
데이터 테이블은 게임 데이터를 행(Row)과 열(Column)의 형태로 정리하여 저장하는 언리얼 엔진의 에셋입니다. 각 행(Row) 은 하나의 데이터 항목(예: 특정 아이템)을 나타내고, 각 열(Column) 은 그 항목의 특정 속성(예: 아이템 이름, 공격력, 무게)을 나타냅니다.
데이터 테이블의 가장 큰 장점은 다음과 같습니다.
- 중앙 집중식 관리: 모든 관련 데이터를 한곳에 모아 관리할 수 있습니다.
- 쉬운 편집: 테이블 형태로 되어 있어 기획자나 디자이너가 블루프린트나 코드를 수정하지 않고도 데이터를 쉽게 추가, 수정, 삭제할 수 있습니다.
- 블루프린트 연동: 블루프린트에서 특정 행의 데이터를 쉽게 검색하고 가져와 사용할 수 있습니다.
- 확장성: 새로운 데이터 항목이나 속성을 추가하기 용이합니다.
데이터 테이블을 사용하려면, 먼저 해당 데이터의 '구조'를 정의하는 구조체(Struct) 가 필요합니다. 1절에서 다루었던 구조체가 바로 데이터 테이블의 각 행이 가질 데이터 타입을 정의하는 역할을 합니다.
데이터 테이블 생성 및 설정
데이터 테이블을 생성하고 블루프린트와 연동하는 단계는 다음과 같습니다.
-
데이터 구조체 정의 (1절 복습)
- 먼저 데이터 테이블에 들어갈 데이터의 형식을 정의하는 구조체를 생성합니다.
- 콘텐츠 브라우저에서 우클릭 >
블루프린트(Blueprints)
>구조체(Structure)
를 선택합니다. - 이름을
F_ItemData
(예시: 아이템 정보를 저장할 구조체)로 지정합니다. - 구조체 에디터를 열고 아이템이 가질 속성들을 변수로 추가합니다.
ItemName
(Text)Description
(Text)AttackPower
(Integer)Weight
(Float)ItemMesh
(Static Mesh Reference)
- 저장 버튼을 클릭합니다.
-
데이터 테이블 생성
- 콘텐츠 브라우저에서 우클릭 >
기타(Miscellaneous)
>데이터 테이블(Data Table)
을 선택합니다. - 팝업되는 창에서
Row Structure
를 여러분이 방금 만든 구조체(F_ItemData
)로 선택합니다. - 이름을
DT_Items
와 같이 지정합니다. (일반적으로 'DT_' 접두사를 사용합니다.) - 저장 버튼을 클릭합니다.
- 콘텐츠 브라우저에서 우클릭 >
-
데이터 테이블에 데이터 입력
- 생성된
DT_Items
데이터 테이블 에셋을 더블클릭하여 데이터 테이블 에디터를 엽니다. + 추가(+ Add)
버튼을 클릭하여 새 행을 추가합니다.- 각 행의
Row Name
을 고유하게 지정합니다. 이 이름이 나중에 블루프린트에서 데이터를 검색할 때 사용될 '키(Key)'가 됩니다. (예:Sword_Basic
,Shield_Wooden
,Potion_Health
) - 각 열(구조체 멤버)에 맞는 데이터를 입력합니다.
- Sword_Basic
- ItemName: 기본 검
- Description: 평범한 검입니다.
- AttackPower: 10
- Weight: 2.5
- ItemMesh:
Shape_Cylinder
(예시)
- Potion_Health
- ItemName: 체력 회복 물약
- Description: 체력을 회복시켜줍니다.
- AttackPower: 0
- Weight: 0.1
- ItemMesh:
Shape_Sphere
(예시)
- Sword_Basic
- 모든 데이터 입력 후 저장 버튼을 클릭합니다.
- 생성된
블루프린트에서 데이터 테이블 연동 및 활용
데이터 테이블에 데이터가 준비되었다면, 이제 블루프린트에서 이 데이터를 가져와 사용할 수 있습니다.
- 블루프린트 열기: 데이터를 활용할 액터 블루프린트(예:
BP_PlayerCharacter
)를 엽니다. Get Data Table Row
노드 사용- 이벤트 그래프의 빈 공간에서 마우스 오른쪽 버튼을 클릭합니다.
Get Data Table Row
를 검색하여 노드를 추가합니다.Data Table
핀에 여러분이 만든DT_Items
데이터 테이블 에셋을 지정합니다. (드롭다운에서 선택)Row Name
핀에 가져오고 싶은 데이터의 행 이름을Text
형태로 입력합니다. (예:"Sword_Basic"
) 또는Make Literal Text
노드를 연결하여 텍스트를 입력합니다.Get Data Table Row
노드에는 두 개의 실행 출력 핀이 있습니다:Found Row
: 지정된Row Name
의 데이터를 성공적으로 찾았을 때 실행됩니다.Not Found
: 지정된Row Name
의 데이터를 찾지 못했을 때 실행됩니다. (오타나 존재하지 않는 이름 입력 시)
Row Name
입력 핀은 텍스트(Text) 타입이므로, 만약String
타입의 변수나 입력이 있다면ToString
이나ToText
컨버터 노드를 사용해야 합니다.
- 가져온 데이터 사용
Get Data Table Row
노드의Out Row
출력 핀은 여러분이 지정한F_ItemData
구조체 타입의 데이터를 반환합니다.- 이
Out Row
핀에서 드래그하여Break F_ItemData
노드를 검색하고 선택합니다. - 이제
F_ItemData
구조체 내의 개별 멤버 변수들(ItemName, AttackPower 등)에 접근하여 사용할 수 있습니다. - 예시:
Found Row
실행 핀 뒤에Print String
노드를 연결하고,Break F_ItemData
에서ItemName
을 가져와Print String
의In String
핀에 연결합니다. 또한,AttackPower
를 가져와 플레이어 캐릭터의 공격력 변수에Set
할 수 있습니다.
활용 시나리오
- 아이템 생성: 게임 시작 시
DT_Items
에서Row Name
을 통해 특정 아이템 데이터를 가져와 해당 아이템 액터의 속성을 설정할 수 있습니다. - NPC 대화:
DT_Dialogue
와 같은 데이터 테이블에 NPC의 대화 내용을 저장하고, 퀘스트 진행 상황에 따라 해당 대화 데이터를 가져와 출력합니다. - 레벨 디자인: 특정 오브젝트의 배치나 속성을 데이터 테이블에 저장하여, 디자이너가 블루프린트 수정 없이 레벨의 다양한 요소를 조정할 수 있게 합니다.
데이터 테이블은 게임 데이터를 효율적으로 관리하고, 기획자와 프로그래머 간의 협업을 원활하게 하며, 게임의 확장성과 유지보수성을 크게 높여주는 매우 중요한 기능입니다. 복잡한 데이터를 다룰수록 데이터 테이블의 진가가 발휘될 것입니다.
이번 절에서는 데이터 테이블의 개념, 생성 및 설정 방법, 그리고 블루프린트에서 데이터를 연동하고 활용하는 방법에 대해 자세히 알아보았습니다. 데이터 테이블은 대규모 게임 프로젝트에서 필수적인 데이터 관리 도구입니다.