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

저장 시스템 - 3) 데이터 슬롯 재설정

monstro 2025. 12. 20. 23:40
728x90
반응형

- 개요

데이터 로드 맵의 HUD에서 데이터 슬롯을 클릭하고 이름을 입력받아 슬롯에 적용하도록 설정한다

 

- C++ 사이드

1) LoadScreenSaveGame 클래스

 

게임 데이터를 저장하는 컨테이너 역할을 수행하는 SaveGame 클래스를 위와 같이 생성한다

멤버변수는 다음과 같이 구성하였다

  • SlotName 멤버변수 : 데이터 슬롯의 이름
  • SlotIndex 멤버변수 : 데이터 슬롯의 인덱스
  • PlayerName 멤버변수 :  데이터 슬롯에 저장할 플레이어의 이름

 

2) AuraGameModeBase 클래스

 

슬롯데이터를 저장하기 위한 SaveSlotData 함수를 추가한다

또, 게임의 데이터를 저장하기 위한 SaveGame에 대한 Subclass를 멤버변수로 추가한다

 

 

SaveSlotData 함수의 로직은 위와 같다

  • DoesSaveGameExist 함수를 호출하여 특정한 이름의 세이브 파일이 존재하는지 확인
    • 존재한다면 DeleteGameInSlot 함수를 호출하여 세이브 파일을 디스크에서 삭제 
  • CreateSaveGameObject 함수를 호출하여 멤버변수로부터 SaveGame의 인스턴스를 생성
  • 생성한 인스턴스를 LoadScreenSaveGame 클래스로 캐스팅하고 PlayerName을 설정
  • SaveGameToSlot 함수를 호출하여 게임 데이터실제 파일(.sav)로 기록

 

3) MVVM_LoadSlot 클래스

 

데이터 슬롯을 클릭했다면 변경하기 위한 SetWidgetSwitcherIndex 델리게이트를 추가한다

해당 델리게이트는 C++블루프린트 모두에서 사용할 수 있으며 1 : 多의 관계로 브로드캐스트한다

마지막으로 변경하기 위한 데이터 슬롯의 인덱스를 인자로 전달한다

 

 

SetWidgetSwitcherIndex 델리게이트를 멤버변수로 추가하고,

InitializeSlot 함수를 새롭게 추가한다

 

 

InitializeSlot 함수의 로직은 임의로 SetWidgetSwitcherIndex 멤버변수를 브로드캐스트한다

 

4) MVVM_LoadScreen 클래스

 

위와 같이 3개의 함수를 새롭게 추가한다

 

 

NewSlotButtonPressed 함수의 로직은 위와 같다

  • GameMode를 가져와 AuraGameModeBase로 캐스팅
  • 선택한 데이터 슬롯PlayerName 설정
  • 캐스팅한 GameMode로부터 SaveSlotData 함수를 호출하여 해당하는 슬롯의 이름으로 데이터 파일 저장
  • 선택한 데이터 슬롯으로부터 InitializeSlot 함수 호출

 

 

NewGameButtonPressed 함수의 로직은 위와 같이 임시로 구성하였다

SelectSlotButtonPressed 함수의 경우 정의만하고 로직은 구성하지 않았다

 

- 블루프린트 사이드

1) WBP_LoadSlot_Vacant 위젯 블루프린트

실제 이미지

 

 

BlueprintInitializeWidget 이벤트를 위와 같이 구성한다

버튼의 OnClicked 이벤트를 설정하여 클릭한 슬롯으로부터 NewGameButtonPressed 함수를 호출한다

 

2) WBP_LoadSlot_EnterName 위젯 블루프린트

실제 이미지

 

 

BlueprintInitializeWidget 이벤트를 위와 같이 구성한다

버튼의 OnClicked 이벤트를 위와 같이 설정하여 입력창에 입력한 값

NewSlotButtonPressed 함수에 넘겨주어 입력한 값으로 세이브 파일을 생성한다

 

3) WBP_LoadSlot_WidgetSwitcher 위젯 블루프린트

실제 이미지

 

선택할 수 있는 슬롯 -> 플레이어 이름을 입력하는 슬롯 -> 저장된 데이터를 보여주는 슬롯 순서

전환하기 위한 위젯으로 사용한다

 

3 - 1) InitializeSlot 함수

 

InitializeSlot 함수의 로직은 위와 같다

선택한 슬롯의 인덱스에 해당하는 3개의 슬롯 UI들을 설정하고 BlueprintInitializeWidget 함수를 호출한다

 

3 - 2) BlueprintInitializeWidget 이벤트

 

BlueprintInitializeWidget 이벤트의 로직은 위와 같다

사용중인 슬롯의 ViewModelSetWidgetSwitcherIndex 델리게이트에 

해당 슬롯의 인덱스에 해당하는 UI를 활성화하는 이벤트를 바인드한다

 

- 최종 실행 결과

 

728x90
반응형