- 개요
인게임에서 게임의 데이터를 저장할 수 있는 체크 포인트를 새롭게 추가한다
체크 포인트의 위치를 기준으로 게임의 데이터를 저장하고 저장된 데이터를 불러올 수 있도록 설정한다
- C++ 사이드
1) Checkpoint 클래스

PlayerStart 클래스를 상속받아 플레이어의 시작 위치를 결정할 Checkpoint 클래스를 생성한다
멤버변수의 구성은 다음과 같다
- CheckpointMesh 멤버변수 : 체크 포인트의 SM 컴포넌트
- Sphere 멤버변수 : 오버랩된 플레이어를 탐지할 Sphere 컴포넌트

생성자를 위와 같이 구성하여 부모 클래스에서 생성한 컴포넌트를 수정할 수 있도록 설정한다
CheckpointMesh 멤버변수와 Sphere 멤버변수를 생성하고 설정한다

BeginPlay 함수를 위와 같이 구성하여 Sphere 멤버변수에 오버랩되면 OnSphereOverlap 함수를 호출한다

OnSphereOverlap 함수의 로직은 위와 같다
오버랩된 대상으로부터 PlayerInterface로부터 오버라이드한 SaveProgress 함수를 호출하고
HandleGlowEffects 멤버함수를 호출한다

HandleGlowEffects 함수의 로직은 위와 같다
빛이 발광하는 머티리얼 인스턴스를 생성하고 CheckpointMesh 멤버변수에 적용한다
이후에 블루프린트에서 오버라이드한 CheckPointReached 함수에 머티리얼 인스턴스를 넘겨주어 호출한다
2) LoadScreenSaveGame 클래스

플레이어의 시작 위치를 결정하는 PlayerStart 클래스의 Tag를 멤버변수로 추가한다
3) AuraGameInstance 클래스

GameInstance 클래스에 위와 같이 3개의 멤버변수를 추가한다
- PlayerStartTag 멤버변수 : PlayerStart의 태그
- LoadSlotName 멤버변수 : 게임의 데이터를 불러올 슬롯의 이름
- LoadSlotIndex 멤버변수 : 게임의 데이터를 불러올 슬롯의 순번
4) MVVM_LoadSlot 클래스

게임 데이터를 저장할 슬롯의 ViewModel 클래스에 PlayerStart의 태그를 멤버변수로 추가한다
5) AuraGameModeBase 클래스

기본적으로 사용할 PlayerStart의 태그를 의미하는 DefaultPlayerStartTag 멤버변수를 추가한다

위와 같이 3개의 함수를 새롭게 추가한다

SaveSlotData 함수에 위와 같이 로직을 추가하여 SaveGame 클래스의 PlayerStartTag 멤버변수의 값을
게임 데이터를 저장할 데이터 슬롯의 ViewModel의 PlayerStartTag 값으로 설정한다

ChoosePlayerStart 함수의 로직은 위와 같다
- World를 기준으로 PlayerStart 클래스의 인스턴스들을 순회
- 순회중인 인스턴스들을 대상으로 다음의 조건을 판단
- 순회중인 PlayerStart가 존재
- PlayerStart의 PlayerStartTag가 GameInstance의 PlayerStartTag와 동일
- 조건에 부합한다면 해당 PlayerStart를 반환
- 순회중에 반환하지 못했다면, 첫 번째 PlayerStart를 반환

RetrieveInGameSaveData 함수의 로직은 위와 같다
GameInstance로부터 LoadSlotName과 LoadSlotIndex를 가져와 SaveGame을 반환한다

SaveInGameProgressData 함수의 로직은 위와 같다
GameInstace로부터 LoadSlotName과 LoadSlotIndex를 가져오고 PlayerStartTag의 값을 수정한 후에
가져온 2개의 값을 사용하여 게임 데이터를 데이터 슬롯에 저장한다
6) MVVM_LoadScreen 클래스

NewSlotButtonPressed 함수에 위와 같이 로직을 추가한다
선택한 데이터 슬롯의 PlayerStartTag를 GameMode의 DefaultPlayerStartTag로 설정하고
GameInstance를 가져와 LoadSlotName + LoadSlotIndex + PlayerStartTag를 설정한다

PlayerButtonPressed 함수에 위와 같이 로직을 추가한다
GameMode -> GameInstace를 가져오고 선택한 데이터 슬롯의 값으로
가져온 GameInstace의 PlayerStartTag + LoadSlotName + LoadSlotIndex를 설정한다

LoadData 함수에 위와 같이 로직을 추가하여
저장된 게임 데이터를 불러온 데이터 슬롯의 ViewModel의 PlayerStartTag를 설정한다
7) PlayerInterface 클래스

SaveProgress 함수를 추가하여 게임의 데이터를 저장한다
8) AuraCharacter 클래스

PlayerInterface로부터 상속받은 SaveProgress 함수를 오버라이드한다

SaveProgress 함수의 로직은 위와 같다
GameMode -> LoadScreenSaveGame을 가져오고 PlayerStartTag를 설정한다
이후 GameMode의 SaveInGameProgressData 함수에 설정이 끝난 SaveGame을 넘겨주고 호출한다
- 블루프린트 사이드
1) BP_AuraGameMode 블루프린트

DefaultPlayerStartTag 멤버변수를 위와 같이 설정한다
2) BP_Checkpoint 블루프린트

CheckPointReached 함수를 위와 같이 구성하여 적용중인 머티리얼의 값을 증가시킨다
3) 맵에 존재하는 BP_Checkpoint 인스턴스

PlayerStartTag 멤버변수를 위와 같이 설정한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 체크 포인트 - 3) GameplayAbility 저장 + 불러오기 (0) | 2026.01.02 |
|---|---|
| 체크 포인트 - 2) PlayerState가 소유하고 있는 데이터 저장 + 불러오기 (0) | 2026.01.01 |
| 저장 시스템 - 최종) 저장된 게임 데이터를 사용하여 맵 불러오기 (0) | 2025.12.27 |
| 저장 시스템 - 5) 저장된 데이터 슬롯 삭제 (0) | 2025.12.27 |
| 저장 시스템 - 4) 데이터 저장과 불러오기 (0) | 2025.12.26 |