1. 데이터테이블 양식에 맞게 구조체를 생성
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "UObject/NoExportTypes.h"
#include "HD_SharedStruct.generated.h"
/**
*
*/
UCLASS()
class HDCLIENT_API UHD_SharedStruct : public UObject
{
GENERATED_BODY()
};
USTRUCT(BlueprintType)
struct FDataWave : public FTableRowBase
{
GENERATED_BODY()
protected:
UPROPERTY(EditAnywhere)
uint8 _stage = 0;
UPROPERTY(EditAnywhere)
uint8 _wave = 0;
};
#include "Engine/DataTable.h"
구조체는 FTableRowBase로부터 상속받았다
나는 웨이브와 관련된 데이터테이블을 만들기 위해 이렇게 구조체를 간단하게 짜놨다
2. 에디터에서 데이터테이블 생성
우클릭을해서 데이터 테이블을 선택한다
C++에서 만든 구조체를 선택한다
잘 생성된 모습을 확인할 수 있다
3. C++에서 생성된 데이터테이블 불러오기
헤더
UCLASS()
class HDCLIENT_API UHD_GI : public UGameInstance
{
GENERATED_BODY()
protected:
UHD_GI();
private:
UDataTable* _dt_wave = nullptr;
};
.cpp
UHD_GI::UHD_GI()
{
static ConstructorHelpers::FObjectFinder<UDataTable> DT_GAME(TEXT("/Game/_HDClient/ReadOnly/Data/HDDT_Wave.HDDT_Wave"));
if (DT_GAME.Succeeded()) { _dt_wave = DT_GAME.Object; }
}
나는 게임인스턴스 생성자에서 불러왔지만
게임모드에서 불러와도 된다.
->게임모드에서 불러와도 되지만 데이터는 레벨이 이동해도 그대로 남아 있어야 하기 때문에 레벨이 이동되면 변경되는 게임모드보다는 게임인스턴스가 더 올바른? 선택이라고 본다
-----------------------------------------------------------------------------------------------------------------------------------
1. csv나 json으로 익스포트, 임포트 하는법
만들어진 데이터테이블을 우클릭하면 csv, json으로 익스포트할 수 있음
csv,json파일을 수정해서 데이터테이블에 다시 적용시키기 위해 리임포트로 변경된 데이터를 업데이트
csv, json파일로 새로운 데이터테이블을 생성하려면...
우선 추가하려는 데이터의 구조에 맞게 구조체를 먼저 생성해주고 밑에 스샷처럼 추가하면 된다