내배캠/Unreal Engine

데이터 테이블에 사용할 구조체 만들기

동그래님 2025. 1. 27. 20:15
Item 클래스의 데이터를 정리한다고 했을 때,
어떤 아이템이 몇 %확률로 스폰되는지를 코드로 직접 하드 코딩하면 매번 수정할 때마다 빌드를 해줘야하는 번거로움이 있다. 
언리얼 엔진의 데이터 테이블을 사용하면, 이를 엑셀(csv)나 JSON파일로 관리해서 엔진안으로 임포트하고, 코드나 블루프린트에서 쉽게 불러 쓸 수 있다.
만약 데이터의 수정이 필요하다면 기획자나 디자이너도 엑셀에서 숫자만 바꾸어, 엔진에서 reimport만 해주면 되어 편리하게 수정할 수 있다.

  • struct는 class가 아니기에 부모 클래스를 선택할 수 없다.
  • 따라서 None을 선택한다

 

#pragma once

#include "CoreMinimal.h"

class STRIKEZONE_API ItemSpawnRow
{
public:
	DefaultRow();
	~DefaultRow();
};
  • 빈 클래스를 만들면 이와 같이 나오는데, 우린 구조체를 정의할 것이므로 생성자와 소멸자 모두 삭제

 

#pragma once

#include "CoreMinimal.h"
#include "ItemSpawnRow.generated.h"

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

public:
	// 아이템 이름
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FName ItemName;
    // 스폰할 아이템 클래스
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSubclassOf<AActor> ItemClass;
    // 스폰 확률
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float SpawnChance;
};
  • 리플렉션 시스템에 등록해야되기 때문에, (구조체의 이름).generated.h를 추가
  • USTRUCT(BlueprintType) 추가
  • class를 struct로 변경하고, 구조체 이름 앞에 F를 붙인다.
  • 언리얼 엔진은 FTableRowBase라는 기본 구조체를 제공하며 이를 상속한 구조체를 만들면, CSV 혹은 JSON 행을 해당 구조체에서 정해준 형태로 받아올 수 있게 된다.