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

저장 시스템 - 4) 데이터 저장과 불러오기

monstro 2025. 12. 26. 11:24
728x90
반응형

- 개요

데이터 슬롯에 게임의 데이터를 저장하고 또 저장된 데이터를 불러오도록 설계한다

 

- C++ 사이드

1) LoadScreenSaveGame 클래스

 

데이터 슬롯에 의해 저장되고 불러오는 SaveGame 클래스에 위와 같이 슬롯의 상태를 의미하는 열거형을 추가한다

구성은 다음과 같다

  • Vacant : 기본상태
  • EnterName : 저장할 플레이어의 이름을 입력하는 상태
  • Taken : 데이터 슬롯에 데이터가 저장된 상태

 

 

추가한 열거형의 멤버변수를 추가하고 기본값을 Vacant로 설정한다

 

2) MVVM_LoadSlot 클래스

 

개별 슬롯으로 사용하는 ViewModel 클래스에 위와 같이 2개의 멤버변수를 추가한다

  • SlotIndex 멤버변수 : 데이터 슬롯의 순서
  • SlotStatus 멤버변수 : 데이터 슬롯의 상태

 

 

InitializeSlot 함수에 위와 같이 로직을 설정한다

데이터 슬롯의 상태에 해당하는 값을 가져와 SetWidgetSwitcherIndex 델리게이트로 브로드캐스트한다

 

3) MVVM_LoadScreen 클래스

 

개별 슬롯들을 갖고 있는 래퍼 클래스로 사용할 ViewModel 클래스에

해당 ViewModel을 사용하는 PlayerController를 멤버변수로 추가하고 Getter 함수와 Setter 함수를 추가한다

 

 

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

데이터 슬롯을 생성하고 생성한 슬롯의 이름순서를 설정한다

 

 

NewSlotButtonPressed 함수를 위와 같이 추가하여

멤버변수로 갖고 있는 PlayerController가 유효한지 확인하여 

클릭한 데이터 슬롯에 저장할 플레이어의 이름 + 슬롯의 상태를 설정하고 저장한다

이후 클릭한 데이터 슬롯으로부터 InitializeSlot 함수를 호출한다

 

 

LoadData 함수의 로직은 위와 같다

GameMode를 가져오고 데이터 슬롯들을 순회하면서

가져온 GameMode로부터 SaveGame을 가져와 데이터 슬롯들을 설정한다

 

4) LoadScreenHUD 클래스

 

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

HUD의 PlayerController를 가져와 래퍼 클래스로 사용할 ViewModelPlayerController를 설정한다

이후 래퍼 클래스의 ViewModel로부터 LoadData 함수를 호출한다

 

5) AuraGameModeBase 클래스

 

 

GetSaveSlotData 함수를 위와 같이 추가하여

가져올 SaveGame이 존재한다면 가져오고, 없다면 새로 생성하여 반환한다

 

 

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

게임 데이터를 저장한 데이터 슬롯의 상태를 설정한다

 

6) AuraPlayerController 클래스

 

 

클라이언트에서 호출하여 서버에서 수행할 RPC 함수를 위와 같이 추가한다

GameMode를 가져와 SaveSlotData 함수를 호출하여 선택한 데이터 슬롯에 게임의 데이터를 저장한다

 

- 블루프린트 사이드

1) WBP_LoadScreen 위젯 블루프린트

Construct 이벤트에 로직 추가

 

Destruct 이벤트 생성

 

Construct 이벤트와 Destruct 이벤트를 위와 같이 작성하여

게임 데이터를 저장하고 불러오는 UI설정되어 있는 동안 플레이어의 입력을 제한하고

해당 UI가 사라지면 플레이어의 입력을 복구한다

 

- 최종 실행 결과

 

728x90
반응형