언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

체크 포인트 - 최종) 월드 저장하고 불러오기

monstro 2026. 1. 9. 11:48
728x90
반응형

- 개요

월드에 배치된 체크 포인트 중에서 활성화된 체크 포인트도 게임 데이터에 저장하여

저장된 데이터를 로드하여 게임을 시작하면 활성화된 체크 포인트를 동작시키도록 설계한다

 

- C++ 사이드

1) LoadScreenSaveGame 클래스

SavedActor 구조체 추가

 

== 연산자 오버로딩

 

SavedActor 구조체를 새롭게 생성한다

해당 구조체를 사용하여 활성화된 체크 포인트와 같은 특정 Actor를 데이터에 저장한다

멤버변수의 구성은 다음과 같다

  • ActorName 멤버변수 : 해당 Actor의 이름
  • Transform 멤버변수 : 해당 Actor의 Transform
  • Bytes 멤버변수 : 해당 Actor의 정보uint8로 직렬화하여 저장하기 위한 TArray

 

SavedMap 구조체 추가

 

SavedMap 구조체를 새롭게 생성한다

해당 구조체를 사용하여 하나의 맵에 존재하는 특정 Actor들을 데이터에 저장한다

멤버변수의 구성은 다음과 같다

  • MapAssetName 멤버변수 : 해당 맵의 이름
  • SavedActors 멤버변수 : 해당 맵에 존재하는 특정 Actor들을 저장하는 TArray

 

LoadScreenSaveGame 클래스에 멤버변수 + 멤버함수 추가

 

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를 찾아 순회하면서 로직을 진행
    • 각 체크포인트의 이름, 트랜스폼 및 변수들바이너리 데이터로 직렬화
    • 직렬화된 데이터현재 FSavedMapSavedActors에 추가
  • 업데이트된 FSavedMapSaveGame 인스턴스에 반영하고, 실제 세이브 슬롯에 저장

 

 

LoadWorldState 함수의 로직은 위와 같다

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

 

4) AuraCharacter 클래스

 

 

ServerLoadWorldState 함수를 새롭게 추가한다

해당 함수를 호출하여 GameMode로부터 LoadWorldState 함수를 호출한다

 

 

PossessedBy 함수를 위와 같이 수정하여

로드된 게임 데이터를 바탕으로 GA를 플레이어에게 부여하고 월드를 설정한다

 

- 최종 실행 결과

 

728x90
반응형