언리얼 엔진에서는 데이터를 관리하는 대표적인 방법으로 DataAssetDataTable이 있다.
둘 다 데이터를 관리하기 위한 용도지만, 사용하는 목적과 관리 방식이 다르다.


항목 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,50

Import 하면 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