게임을 개발하다 보면 다양한 데이터를 체계적으로 관리해야 할 필요가 있다.
아이템 정보, 적의 능력치, 맵 데이터 등 게임 곳곳에서 데이터를 저장하고 불러오는 작업이 필요하다.
이때 언리얼 엔진에서 주로 사용하는 데이터 구조가 데이터 에셋(Data Asset) 과 데이터 테이블(Data Table)이 있다.
하지만 이 두 가지 방식은 사용 목적과 특징이 다르다.
언제 데이터 에셋을 써야 하고, 언제 데이터 테이블을 써야 하는지 정리해보려 한다.
📌 데이터 에셋과 데이터 테이블의 차이점
✅ 데이터 에셋 (Data Asset)
데이터 에셋은 객체 단위로 데이터를 관리하는 방식이다. 언리얼 에디터에서 시각적으로 데이터를 확인하고 수정할 수 있으며, 블루프린트에서도 쉽게 접근할 수 있다.
🟢 데이터 에셋의 장점
- 런타임에서 동적으로 수정 가능 → 게임이 실행 중에도 특정 데이터를 변경할 수 있다.
- 블루프린트에서 직관적으로 데이터 수정 가능 → 에디터에서 쉽게 값을 변경할 수 있어 개발 속도가 빨라진다.
- 복잡한 데이터 구조를 다루기 적합 → 구조체 내부에 다른 구조체가 포함된 중첩 구조체(Nested Struct)도 쉽게 관리할 수 있다.
🔴 데이터 에셋의 단점
- 대량 데이터를 관리하기엔 비효율적 → 개별 객체 단위로 관리되므로, 100개 이상의 데이터를 다룰 때 불편할 수 있다.
- 데이터 크기가 커지면 복사 비용 발생 → 중첩 구조가 많아지고 데이터 크기가 커질수록, 데이터가 복사될 때 성능이 저하될 수 있다.
✅ 데이터 테이블 (Data Table)
데이터 테이블은 엑셀과 같은 행렬(Row & Column) 형식으로 데이터를 저장하는 방식이다. 일반적으로 CSV 또는 JSON 파일로 외부에서 데이터를 관리하고, 언리얼 엔진에서 이를 불러와 사용하는 형태이다.
🟢 데이터 테이블의 장점
- 대량 데이터를 관리하기 효율적 → 한 번에 수백 개의 데이터를 저장하고 빠르게 불러올 수 있다.
- 메모리 사용량이 적음 → 데이터가 직렬화(Serialization)된 형태로 저장되므로, 불필요한 복사가 발생하지 않는다.
- 외부에서 관리 가능 → JSON이나 CSV 파일을 이용하면 엑셀 같은 툴에서도 데이터를 쉽게 수정할 수 있다.
🔴 데이터 테이블의 단점
- 런타임에서 데이터를 수정할 수 없음 → 데이터 테이블은 기본적으로 읽기 전용(Read-Only)이다.
- 복잡한 데이터 구조를 다루기 어려움 → CSV 파일에서는 중첩된 구조체나 배열 데이터를 직관적으로 표현하기 어려움.
- JSON 파일을 사용해야 하는 경우가 많음 → 데이터가 복잡할 경우 CSV보다는 JSON이 필요하며, JSON을 직접 작성해야 하므로 번거로울 수 있다.
📌 그렇다면, 어떤 상황에서 어떤 데이터 구조를 사용해야 할까?
📍 데이터가 단순하고, 런타임에서 변경할 필요가 없는 경우 → 데이터 테이블
예를 들어, 게임 내 아이템 목록, 적의 능력치, 맵 데이터처럼 고정된 데이터를 다룰 때는 데이터 테이블이 훨씬 효율적일 것이다.
대량의 데이터를 한 번에 관리할 수 있고, JSON/CSV 파일로 쉽게 수정할 수 있기 때문이다.
📍 데이터가 복잡하고, 런타임에서 수정해야 하는 경우 → 데이터 에셋
특정 캐릭터의 능력치나 플랫폼의 이동 속도, AI의 행동 패턴 등과 같이 게임 플레이 중 데이터를 변경할 가능성이 있는 경우, 데이터 에셋을 활용하면 훨씬 유연한 데이터 관리가 가능하다.
📌복잡한 데이터를 다룰 때 가장 효율적인 방법
중첩 구조를 포함하는 대량의 데이터를 다룰 때는 데이터 테이블 + JSON 사용이 가장 효율적일 수 있다.
✅ 데이터 테이블 + JSON을 활용하면?
- 대량 데이터 관리 가능 → 데이터 테이블을 사용하면 여러 개의 데이터를 한 번에 관리할 수 있다.
- 중첩 구조 표현 가능 → JSON을 활용하면 중첩된 데이터를 깔끔하게 정리할 수 있다.
- 메모리 사용량 최적화 → 데이터 테이블은 구조체를 직접 복사하는 방식이 아니라 필요한 데이터만 로드하기 때문에 메모리를 절약할 수 있다.
'내배캠 > Unreal Engine' 카테고리의 다른 글
가비지 컬렉션과 메모리 관리 (0) | 2025.01.31 |
---|---|
Pawn에 Possess 하기 (0) | 2025.01.31 |
인터페이스 기반 아이템 클래스 구현_2_아이템 스폰 및 레벨 데이터 관리 (0) | 2025.01.27 |
데이터 테이블에 사용할 구조체 만들기 (0) | 2025.01.27 |
DataTable 만들기(CSV, Unreal) (0) | 2025.01.27 |