- 개요
월드에 배치된 체크 포인트 중에서 활성화된 체크 포인트도 게임 데이터에 저장하여
저장된 데이터를 로드하여 게임을 시작하면 활성화된 체크 포인트를 동작시키도록 설계한다
- C++ 사이드
1) LoadScreenSaveGame 클래스


SavedActor 구조체를 새롭게 생성한다
해당 구조체를 사용하여 활성화된 체크 포인트와 같은 특정 Actor를 데이터에 저장한다
멤버변수의 구성은 다음과 같다
- ActorName 멤버변수 : 해당 Actor의 이름
- Transform 멤버변수 : 해당 Actor의 Transform
- Bytes 멤버변수 : 해당 Actor의 정보를 uint8로 직렬화하여 저장하기 위한 TArray

SavedMap 구조체를 새롭게 생성한다
해당 구조체를 사용하여 하나의 맵에 존재하는 특정 Actor들을 데이터에 저장한다
멤버변수의 구성은 다음과 같다
- MapAssetName 멤버변수 : 해당 맵의 이름
- SavedActors 멤버변수 : 해당 맵에 존재하는 특정 Actor들을 저장하는 TArray

SavedMaps 멤버변수를 추가하여 특정 맵의 특정 Actor들을 SaveGame 인스턴스에 저장한다

GetSavedMapWithMapName 함수의 로직은 위와 같다
SaveMaps 멤버변수를 순회하면서 인자로 받은 이름을 가진 맵을 반환한다

HasMap 함수의 로직은 위와 같다
SaveMaps 멤버변수를 순회하면서 인자로 받은 이름을 가진 맵이 존재하는지 여부를 반환한다
2) Checkpoint 클래스

bReached 멤버변수와 2개의 함수를 새롭게 추가한다
해당 멤버변수를 사용하여 체크 포인트의 활성화 여부를 설정한다

ShouldLoadTransform 함수는 기본적으로 false를 반환하도록 설정한다
LoadActor 함수에서는 체크 포인트가 활성화되었다면 HandleGlowEffects 함수를 호출하도록 설정한다

OnSphereOverlap 함수에 위의 로직을 추가하여 플레이어가 오버랩되면
bReached 멤버변수를 true로 설정하고, GameMode로부터 SaveWorldState 함수를 호출하도록 설정한다
3) AuraGameModeBase 클래스

2개의 함수를 새롭게 추가한다

SaveWorldState 함수의 로직은 위와 같다
- 스트리밍 접두사를 제거하여 현재 맵의 순수한 이름을 확보
- 게임 인스턴스를 통해 현재 사용 중인 세이브 슬롯의 데이터를 불러옴
- 세이브 파일에 현재 FSavedMap이 없다면 새로 생성하고, 기존에 저장된 SavedActors를 초기화
- 월드 내의 모든 ACheckpoint를 찾아 순회하면서 로직을 진행
- 각 체크포인트의 이름, 트랜스폼 및 변수들을 바이너리 데이터로 직렬화
- 직렬화된 데이터를 현재 FSavedMap의 SavedActors에 추가
- 업데이트된 FSavedMap를 SaveGame 인스턴스에 반영하고, 실제 세이브 슬롯에 저장

LoadWorldState 함수의 로직은 위와 같다
- 현재 맵 이름을 식별하고, 게임 인스턴스를 통해 세이브 슬롯 정보를 확인
- 확인된 슬롯의 세이브 데이터를 읽어와 LoadScreenSaveGame 객체로 캐스팅
- 현재 월드의 모든 ACheckpoint들을 순회하면서 로직 수행
- 순회중인 Checkpoint의 이름과 동일한 이름을 가진 Actor가 캐스팅된 SaveGame 내에 있는지 확인
- 확인된 Actor의 Transform을 로드해야 한다면 Transform 복구
- 직렬화된 데이터를 실제 값으로 변환하여 Actor에 주입
- 설정이 끝난 Actor(Checkpoint)로부터 LoadActor 함수 호출
4) AuraCharacter 클래스


ServerLoadWorldState 함수를 새롭게 추가한다
해당 함수를 호출하여 GameMode로부터 LoadWorldState 함수를 호출한다

PossessedBy 함수를 위와 같이 수정하여
로드된 게임 데이터를 바탕으로 GA를 플레이어에게 부여하고 월드를 설정한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 게임 맵 - 2) 던전 구조물과 입구 추가 (0) | 2026.01.10 |
|---|---|
| 게임 맵 - 1) 커서 동작 수정 (0) | 2026.01.09 |
| 체크 포인트 - 3) GameplayAbility 저장 + 불러오기 (0) | 2026.01.02 |
| 체크 포인트 - 2) PlayerState가 소유하고 있는 데이터 저장 + 불러오기 (0) | 2026.01.01 |
| 체크 포인트 - 1) 체크 포인트의 위치를 기준으로 게임 불러오기 (0) | 2025.12.28 |