언리얼 엔진에서는 데이터를 관리하는 대표적인 방법으로 DataAsset과 DataTable이 있다.
둘 다 데이터를 관리하기 위한 용도지만, 사용하는 목적과 관리 방식이 다르다.
| 항목 | DataAsset | DataTable |
|---|---|---|
| 관리 단위 | 개별 Asset(.uasset) | 하나의 Table(CSV/JSON) |
| 데이터 수 | 적은 수 ~ 중간 | 많은 수 |
| CSV 지원 | ❌ | ✅ |
| 상속 | ✅ | ❌ (Struct 기반) |
| 함수 구현 | ✅ (UObject) | ❌ |
| Runtime 수정 | 가능 | 읽기 전용으로 사용하는 경우가 대부분 |
| 디자이너 편집 | 매우 편리 | 엑셀 기반 편집 |
DataAsset
DataAsset은 UObject를 상속받는 하나의 Asset이다.
전용 로직, Asset 참조, 상속이 필요한 경우 사용한다.
UCLASS(BlueprintType)
class UItemDataAsset : public UPrimaryDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere)
FText Name;
UPROPERTY(EditAnywhere)
TObjectPtr<UTexture2D> Icon;
UPROPERTY(EditAnywhere)
TObjectPtr<UAnimMontage> UseMontage;
};
UObject 기반
객체이므로 다양한 Asset을 직접 참조할 수 있다.Texture Material Niagara Sound AnimMontage Widget상속 가능
UItemDataAsset ├── UWeaponDataAsset ├── UConsumableDataAsset └── UEquipmentDataAsset
- 함수 작성 가능
virtual void OnUse();
- AssetManager 사용 가능
PrimaryDataAsset을 사용하면 아래에서 사용가능AssetManager Async Loading Primary Asset
단점
- Asset 개수가 많아진다.
예를 들어, 재료 200개 라면DA_Wood DA_Iron DA_Copper DA_Silver DA_Gold 200개... - CSV 관리 불가능
DataAsset은 CSV, JSON을 지원하지 않음 - 일괄 수정이 어렵다.
모든 Asset을 수정하거나 Editor Utility를 작성해야 한다.
DataTable
DataTable은 Struct + CSV 기반으로 동작한다.
데이터가 많고, 형태가 거의 동일할 때 사용한다.
USTRUCT(BlueprintType)
struct FItemData : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere)
FName ID;
UPROPERTY(EditAnywhere)
FText Name;
UPROPERTY(EditAnywhere)
int32 Price;
UPROPERTY(EditAnywhere)
TSoftObjectPtr<UTexture2D> Icon;
};
// CSV
ID,Name,Price
Wood,Wood,100
Iron,Iron,300
Potion,Potion,50Import 하면 DataTable이 생성된다.
- 대량 데이터 관리 용이
수백~수천 개의 데이터를 관리하기 좋다. - CSV 사용 가능, CSV만 다시 Import하면 된다.
- 일괄 수정이 편하다.
엑셀에서 수치들 한 번에 수정 가능하다. - Git 충돌이 적다.
CSV는 Text이므로Diff,Merge가 쉽다.
단점
- 상속이 없다.
- Struct이므로
virtual,override함수 작성 불가능 - UObject가 아니다.
AssetManager 기능을 직접 사용할 수 없다.
DataTable이 Soft Reference를 통해 DataAsset을 참조
DataTable이 Soft Reference DataAsset을 참조할 수 있음
USTRUCT(BlueprintType)
struct FItemRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere)
FName ID;
UPROPERTY(EditAnywhere)
FText Name;
// DataAsset 참조
UPROPERTY(EditAnywhere)
TSoftObjectPtr<UItemDataAsset> ItemData;
};
이런 구조로 DataTable에서 DataAsset을 관리할 수 있음
반응형
'Unreal Engine' 카테고리의 다른 글
| Asset Manager + PrimaryAsset (0) | 2026.06.30 |
|---|---|
| 언리얼 레퍼런스 (0) | 2026.06.29 |
| UE Input 3 (0) | 2026.06.25 |
| UE Input 2 (0) | 2026.06.24 |
| UE Input 1 (0) | 2026.06.23 |