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

체크 포인트 - 1) 체크 포인트의 위치를 기준으로 게임 불러오기

monstro 2025. 12. 28. 20:36
728x90
반응형

- 개요

인게임에서 게임의 데이터를 저장할 수 있는 체크 포인트를 새롭게 추가한다

체크 포인트의 위치를 기준으로 게임의 데이터를 저장하고 저장된 데이터를 불러올 수 있도록 설정한다

 

- 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 멤버변수의 값

게임 데이터를 저장할 데이터 슬롯의 ViewModelPlayerStartTag 값으로 설정한다

 

 

ChoosePlayerStart 함수의 로직은 위와 같다

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

 

 

RetrieveInGameSaveData 함수의 로직은 위와 같다

GameInstance로부터 LoadSlotNameLoadSlotIndex를 가져와 SaveGame을 반환한다

 

 

SaveInGameProgressData 함수의 로직은 위와 같다

GameInstace로부터 LoadSlotNameLoadSlotIndex를 가져오고 PlayerStartTag의 값을 수정한 후에

가져온 2개의 값을 사용하여 게임 데이터를 데이터 슬롯에 저장한다

 

6) MVVM_LoadScreen 클래스

 

NewSlotButtonPressed 함수에 위와 같이 로직을 추가한다

선택한 데이터 슬롯PlayerStartTagGameMode의 DefaultPlayerStartTag로 설정하고

GameInstance를 가져와 LoadSlotName + LoadSlotIndex + PlayerStartTag를 설정한다

 

 

PlayerButtonPressed 함수에 위와 같이 로직을 추가한다

GameMode -> GameInstace를 가져오고 선택한 데이터 슬롯의 값으로 

가져온 GameInstace의 PlayerStartTag + LoadSlotName + LoadSlotIndex를 설정한다

 

 

LoadData 함수에 위와 같이 로직을 추가하여

저장된 게임 데이터를 불러온 데이터 슬롯의 ViewModelPlayerStartTag를 설정한다

 

7) PlayerInterface 클래스

 

SaveProgress 함수를 추가하여 게임의 데이터를 저장한다

 

8) AuraCharacter 클래스

 

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

 

 

SaveProgress 함수의 로직은 위와 같다

GameMode -> LoadScreenSaveGame을 가져오고 PlayerStartTag를 설정한다 

이후 GameModeSaveInGameProgressData 함수에 설정이 끝난 SaveGame을 넘겨주고 호출한다

 

- 블루프린트 사이드

1) BP_AuraGameMode 블루프린트

 

DefaultPlayerStartTag 멤버변수를 위와 같이 설정한다

 

2) BP_Checkpoint 블루프린트

 

CheckPointReached 함수를 위와 같이 구성하여 적용중인 머티리얼의 값을 증가시킨다

 

3) 맵에 존재하는 BP_Checkpoint 인스턴스

 

PlayerStartTag 멤버변수를 위와 같이 설정한다

 

- 최종 실행 결과

 

728x90
반응형