데이터 클래스
게임에 사용될 데이터가 여러 개체에 저장된다면
각 개체 속성 간의 동기화 문제가 발생한다
따라서, 게임 내에서 단 하나의 개체로 관리되는 싱글톤 패턴 객체가 필요하다
언리얼 싱글톤 클래스를 사용하면 되고
엔진 초기화 때부터 게임 종료까지 유지된다
언리얼 싱글톤 클래스
언리얼에서 제공되는 싱글톤 클래스는 총 4가지 종류가 있다
1. 게임 인스턴스
2. 에셋 매니저
3. 게임 플레이 관련 액터 (ex. GameMode, GameState, …)
4. 직접 프로젝트에 싱글톤을 등록한 언리얼 오브젝트 클래스
직접 등록하는 방법은 Settings > Project Settings > Engine > General Settings > Default Classes
Advanced 탭에 Game Singleton Class를 통해 등록할 수 있다
csv 파일
기획 단계에서 작성된 액셀 파일은
.csv라는 Comma Separate Value 확장자를 가진다
해당 파일을 언리얼 엔진 에디터에서 import 할 수 있다
import 된. csv 파일 에셋은 FTableRowBase 구조체를 상속받은 구조체로 읽고 쓰기가 가능하다
파일을 불러들이려면 해당 csv 파일의 각 열의 이름과 동일한 구조체를 선언해야 한다
데이터 속성 별 관리 클래스
HP, MP 같은 경우엔 캐릭터뿐만 아니라 몬스터도 가지고 있는 속성이다
따라서 ActorComponent에서 관리하는 것이 좋다
KillCount는 플레이어 캐릭터만 가지고 있는 속성이다
따라서 PlayerState에서 관리하는 것이 좋다
GameInstance를 통한 관리
싱글톤 객체인 GameInstance를 통해
.csv 파일을 읽고 쓰기를 하고
ActorComponent를 상속받은 StatComponent를 관리하게 된다
// SGameInstance.h
...
#include "Engine/DataTable.h"
#include "SGameInstance.generated.h"
USTRUCT(BlueprintType)
struct FSStatTableRow : public FTableRowBase
{
GENERATED_BODY()
public:
FSStatTableRow()
{
}
public:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
float MaxHP;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
float MaxKillCount;
};
...
class STUDYPROJECT_API USGameInstance : public UGameInstance
{
...
};
// SAnimInstance.cpp
...
#include "Component/SStatComponent.h"
...
void USAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
...
if (IsValid(OwnerCharacter) == true)
{
...
if (IsValid(CharacterMovementComponent) == true)
{
...
bIsDead = OwnerCharacter->GetStatComponent()->GetCurrentHP() <= KINDA_SMALL_NUMBER;
}
}
}
...
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 Game Data - Game Module (0) | 2024.05.17 |
---|---|
언리얼 Game Data - ActorComponent (0) | 2024.05.17 |
언리얼 AI - Decorator (0) | 2024.05.16 |
언리얼 AI - Blackboard Key (0) | 2024.05.16 |
언리얼 AI - Behavior Tree, Blackboard (0) | 2024.05.16 |