1. Data Table 만들기
Data Table은 언리얼에서 많은 데이터를 처리할 때 사용하기 유용한 방식이다. (CSV 사용 가능)
이번 예시는 data table에 actor를 스폰할 위치를 지정해두고, spawner를 통해 해당 위치에 스폰하는 것을 구현해 볼 것이다.
- 먼저 Data Table을 만들려고 하면, 아래 사진과 같이 먼저 행 구조를 선택하라고 한다.
- 행 구조는 FTableRowBase를 상속받아서 만든 구조체를 사용하면 된다.
- 이때 구조체는 UE 에디터에서 만들 수 없어서, VS에서 따로 파일을 추가하여 만들어 주면 된다.
- USTRUCT() 매크로와
- 구조체 앞에 F를 붙여주어야 한다.
- 이번 예시에서는 actor가 스폰될 위치와 회전값을 저장했다.
- 이때 구조체는 UE 에디터에서 만들 수 없어서, VS에서 따로 파일을 추가하여 만들어 주면 된다.
#pragma once
#include "CoreMinimal.h"
#include "PlatformSpawnData.generated.h"
USTRUCT(BlueprintType)
struct SCC_CH3_6_API FPlatformSpawnData : public FTableRowBase
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FVector Position;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FRotator Rotator;
};
2. Data Table 값 작성
- 위에서 행 구조를 만들고 나면, 데이터 테이블 생성시 우리가 만든 행 구조 이름이 뜨는 것을 볼 수 있다.
- 행을 선택하여 데이터 테이블을 만들게 되면, 아래와 같이 값을 넣을 수 있다.
- 이 값을 JSON이나 CSV로 익스포트 한 다음 수정하여, 리임포트 할 수도 있다.
3. Data Table 사용하기
이번 예시에서는 Spawner라는 클래스를 만들고, 해당 클래스에서 Falling Platform 이라는 Actor를 생성할 것이다.
- PlatformSpawner.h 파일
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "PlatformSpawner.generated.h"
class AFallingPlatform;
class UDataTable;
UCLASS()
class SCC_CH3_6_API APlatformSpawner : public AActor
{
GENERATED_BODY()
public:
APlatformSpawner();
protected:
virtual void BeginPlay() override;
public:
UFUNCTION()
void SpawnPlatform();
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "PlatformSpawn")
UDataTable* SpawnDataTable;
};
- PlatformSpawner.cpp 파일
#include "PlatformSpawner.h"
#include "Engine/DataTable.h"
#include "PlatformSpawnData.h"
#include "FallingPlatform.h"
APlatformSpawner::APlatformSpawner()
:SpawnDataTable(nullptr)
{
PrimaryActorTick.bCanEverTick = false;
}
void APlatformSpawner::BeginPlay()
{
Super::BeginPlay();
SpawnPlatform();
}
void APlatformSpawner::SpawnPlatform()
{
if (!SpawnDataTable)
{
return;
}
TArray<FName> RowNames = SpawnDataTable->GetRowNames();
for (const FName RowName : RowNames)
{
FPlatformSpawnData* Row = SpawnDataTable->FindRow<FPlatformSpawnData>(RowName, "");
if (Row)
{
FActorSpawnParameters SpawnParams;
SpawnParams.Owner = this;
GetWorld()->SpawnActor<AFallingPlatform>(
AFallingPlatform::StaticClass()
, Row->Position
, Row->Rotator
, SpawnParams
);
}
}
}
- 아래 사진처럼 우리가 원하는 위치에 Actor가 스폰된 것을 볼 수 있다.
'Unreal Engine' 카테고리의 다른 글
Unreal Engine - 아이템 만들기 (+충돌 처리) (1) | 2025.02.06 |
---|---|
Unreal Engine - Simple Niagara (with cpp) (0) | 2025.02.04 |
UE5 Issues : C++ 충돌 처리 (1) | 2025.01.27 |
UE5 Issues : Additive Animation (animation sequence 색깔) (0) | 2025.01.26 |
Unreal Engine - 캐릭터 만들기 (0) | 2025.01.24 |