- 개요
데이터 슬롯에 게임의 데이터를 저장하고 또 저장된 데이터를 불러오도록 설계한다
- 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를 가져와 래퍼 클래스로 사용할 ViewModel의 PlayerController를 설정한다
이후 래퍼 클래스의 ViewModel로부터 LoadData 함수를 호출한다
5) AuraGameModeBase 클래스


GetSaveSlotData 함수를 위와 같이 추가하여
가져올 SaveGame이 존재한다면 가져오고, 없다면 새로 생성하여 반환한다

SaveSlotData 함수에 위와 같이 로직을 추가하여
게임 데이터를 저장한 데이터 슬롯의 상태를 설정한다
6) AuraPlayerController 클래스


클라이언트에서 호출하여 서버에서 수행할 RPC 함수를 위와 같이 추가한다
GameMode를 가져와 SaveSlotData 함수를 호출하여 선택한 데이터 슬롯에 게임의 데이터를 저장한다
- 블루프린트 사이드
1) WBP_LoadScreen 위젯 블루프린트


Construct 이벤트와 Destruct 이벤트를 위와 같이 작성하여
게임 데이터를 저장하고 불러오는 UI가 설정되어 있는 동안 플레이어의 입력을 제한하고
해당 UI가 사라지면 플레이어의 입력을 복구한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 저장 시스템 - 최종) 저장된 게임 데이터를 사용하여 맵 불러오기 (0) | 2025.12.27 |
|---|---|
| 저장 시스템 - 5) 저장된 데이터 슬롯 삭제 (0) | 2025.12.27 |
| 저장 시스템 - 3) 데이터 슬롯 재설정 (0) | 2025.12.20 |
| 저장 시스템 - 2) 데이터 저장을 위한 준비 (0) | 2025.12.20 |
| 저장 시스템 - 1) 데이터 저장 방식 설정과 MVVM 플러그인 도입 (0) | 2025.12.18 |