GameInstance는 플레이 도중, 원하는 데이터만을 저장할 수 있는 기능이다.
SaveGame과는 다르게 플레이를 종료하면 데이터는 사라지지만 인게임 도중에만 해당 내용이 저장되는 것으로 충분하다면 GameInstance를 사용해볼 수 있다.

GameInstance 클래스를 생성해준다.
#pragma once
#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "DefaultGameInstance.generated.h"
UCLASS()
class THELASTSURVIVOR_API UDefaultGameInstance : public UGameInstance
{
GENERATED_BODY()
public:
UDefaultGameInstance();
UPROPERTY(BlueprintReadWrite, VisibleAnywhere, Category = "Player Stats")
float playerHP;
UPROPERTY(BlueprintReadWrite, VisibleAnywhere, Category = "Player Stats")
int32 getRifleBullet;
UPROPERTY(BlueprintReadWrite, VisibleAnywhere, Category = "Player Stats")
int32 rifleBullet;
UPROPERTY(VisibleAnywhere, Category = "Player Stats")
float walkableFloorAngle;
};
헤더에서는 저장할 데이터를 선언한다.
#include "DefaultGameInstance.h"
UDefaultGameInstance::UDefaultGameInstance()
{
playerHP = 200.0f;
getRifleBullet = 100;
rifleBullet = 0;
walkableFloorAngle = 60.0f;
}
CPP파일에서는 값에 대한 Default값을 지정한다.
void APlayerCharacter::BeginPlay()
{
Super::BeginPlay();
LoadPlayerStats();
}
void APlayerCharacter::LoadPlayerStats()
{
UDefaultGameInstance* GameInstance = Cast<UDefaultGameInstance>(UGameplayStatics::GetGameInstance(GetWorld()));
if (GameInstance) {
playerHP = GameInstance->playerHP;
getRifleBullet = GameInstance->getRifleBullet;
rifleBullet = GameInstance->rifleBullet;
walkableFloorAngle = GameInstance->walkableFloorAngle;
GetCharacterMovement()->SetWalkableFloorAngle(GameInstance->walkableFloorAngle);
}
else {
UE_LOG(LogTemp, Warning, TEXT("Load fail"));
}
}
void APlayerCharacter::SavePlayerStats()
{
UDefaultGameInstance* GameInstance = Cast<UDefaultGameInstance>(UGameplayStatics::GetGameInstance(GetWorld()));
if (GameInstance) {
GameInstance->playerHP = playerHP;
GameInstance->getRifleBullet = getRifleBullet;
GameInstance->rifleBullet = rifleBullet;
GameInstance->walkableFloorAngle = walkableFloorAngle;
GetCharacterMovement()->SetWalkableFloorAngle(walkableFloorAngle);
}
else {
UE_LOG(LogTemp, Warning, TEXT("Save fail"));
}
}
인게임내에서 Level의 이동이 이루어질 때, Player가 가지고 있는 값을 저장한 채로 넘어가고자 한다.
먼저 플레이어가 생성될 때, GameInstance에 저장된 값을 Player가 갖고 있는 변수에 넣어줌으로써 최초에는 Default값으로 지정한 값들이 넘어가고, 이후에는 원하는 지점에서 실행한 SavePlayerStats() 함수에서 GameInstance로 넘긴 값들을 갖게 될 것이다.