0. 개요

게임을 종료할 때 플레이어 스타트 태그를 저장하여 게임을 다시 불러올 때 해당 지점에서 다시 시작할 수 있게 한다.

 

 

1. 플레이어 스타트 태그 저장

(1) MVVM_LoadSlot과 LoadScreenSaveGame에서 플레이어 스타트 태그 지정

	UPROPERTY()
	FName PlayerStartTag;

저장된 게임 데이터에서 슬롯으로 플레이어 스타트 태그를 넘겨주어 최종적으로 해당 위치에서 플레이어 캐릭터가 소환되도록 하는 것이 목표이다.

 

 

(2) AuraGameModeBase의 슬롯 데이터 저장 함수에서 플레이어 스타트 태그 저장

void AAuraGameModeBase::SaveSlotData(UMVVM_LoadSlot* LoadSlot, int32 SlotIndex)
	// 커스텀 저장 게임 오브젝트로 변환하여 데이터 저장
	ULoadScreenSaveGame* LoadScreenSaveGame = Cast<ULoadScreenSaveGame>(SaveGameObject);
	LoadScreenSaveGame->PlayerName = LoadSlot->GetPlayerName();
	LoadScreenSaveGame->MapName = LoadSlot->GetMapName();
	LoadScreenSaveGame->SaveSlotStatus = Taken;
	LoadScreenSaveGame->PlayerStartTag = LoadSlot->PlayerStartTag;

플레이어 스타트 태그도 저장하도록 설정한다.

 

 

(3) 데이터를 불러올 때 플레이어 스타트 불러오기

void UMVVM_LoadScreen::LoadData()
{
	AAuraGameModeBase* AuraGameMode = Cast<AAuraGameModeBase>(UGameplayStatics::GetGameMode(this));

	for (const TPair<int32, UMVVM_LoadSlot*> LoadSlot : LoadSlots)
	{
		// 각 슬롯의 키(슬롯 인덱스)-페어(슬롯)를 사용해 세이브 데이터를 가져오기
		ULoadScreenSaveGame* SaveObject = AuraGameMode->GetSaveSlotData(LoadSlot.Value->LoadSlotName, LoadSlot.Key);

		// 데이터에서 불러오기
		const FString PlayerName = SaveObject->PlayerName;

		TEnumAsByte<ESaveSlotStatus> SaveSlotStatus = SaveObject->SaveSlotStatus;

		LoadSlot.Value->SlotStatus = SaveSlotStatus;
		LoadSlot.Value->SetPlayerName(PlayerName);
		LoadSlot.Value->SetMapName(SaveObject->MapName);
		LoadSlot.Value->PlayerStartTag = SaveObject->PlayerStartTag;
		LoadSlot.Value->InitializeSlot();
	}
}

저장된 데이터로부터 플레이어 스타트를 가져와 슬롯에 저장한다.

 

 

(4) 게임 실행 버튼을 누르면 선택된 슬롯의 태그를 가져와 게임 인스턴스로 전달하기

void UMVVM_LoadScreen::PlayButtonPressed()
{
	AAuraGameModeBase* AuraGameMode = Cast<AAuraGameModeBase>(UGameplayStatics::GetGameMode(this));
	UAuraGameInstance* AuraGameInstance = Cast<UAuraGameInstance>(AuraGameMode->GetGameInstance());
	AuraGameInstance->PlayerStartTag = SelectedSlot->PlayerStartTag;
	
	if (IsValid(SelectedSlot))
		AuraGameMode->TravelToMap(SelectedSlot);
}