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

저장 시스템 - 2) 데이터 저장을 위한 준비

monstro 2025. 12. 20. 15:00
728x90
반응형

- 개요

프로젝트는 저장된 데이터를 다음과 같이 사용하여 진행한다

  • 메인 게임 맵 -> 데이터 로드 맵 -> 데이터 슬롯을 눌러서 새로운 게임 / 기존의 게임 시작

 

이때 MVVM 패턴을 다음과 같이 적용하여 사용한다

  • ViewModel을 사용 : 개별 데이터 슬롯 + 데이터 슬롯을 갖고 있는 래퍼 클래스
  • UserWidget을 사용 : ViewModel의 부모 클래스를 갖고 있는 UI 클래스
  • HUD를 사용 : UserWidget의 클래스를 갖고 있으면서 데이터 로드 맵에서 사용하는 HUD 클래스

 

- C++ 사이드

1) Aura.uproject

MVVM 플러그인의 활성화

 

MVVM 모듈의 추가

 

모듈을 묶어서 관리하는 MVVM 플러그인을 활성화하고,

.h 파일과 .cpp 파일을 사용하기 위해 위와 같이 모듈을 프로젝트에 추가하였다

 

2) MVVM_LoadSlot 클래스

 

데이터를 저장하고 불러오기 위한 개별 슬롯으로 사용하는 ViewModel 클래스를 위와 같이 생성한다

ViewModel에서 데이터 바인딩을 수행할 멤버변수를 위와 같이 설정한다

  • PlayerName 멤버변수 : 플레이어 이름
  • MapName 멤버변수 : 맵 이름
  • PlayerLevel 멤버변수 : 플레이어 레벨
  • LoadSlotName 멤버변수 : 슬롯 이름

또한, 5.3 버전 이상부터는 데이터 바인딩되는 멤버변수들에 대한

public 접근제어 수준의 Getter 함수와 Setter 함수가 필요하므로 위와 같이 함수들을 설정하였다

 

 

Setter 함수들의 로직은 위와 같다

UE_MVVM_SET_PROPERTY_VALUE 매크로를 사용하여 멤버변수의 값을 설정한다

 

3) MVVM_LoadScreen 클래스

 

개별 슬롯들을 갖고 있는 래퍼 클래스로 사용할 ViewModel 클래스를 위와 같이 생성한다

멤버변수는 다음과 같다

  • LoadSlotViewModelClass 멤버변수 : 개별 슬롯들의 인스턴스를 생성하기 위한 클래스
  • LoadSlots 멤버변수 : 생성한 슬롯의 인스턴스들저장할 TMap
  • LoadSlot_0 + LoadSlot_1 + LoadSlot_2 멤버변수 : 생성할 3개의 슬롯 인스턴스들

 

 

InitializeLoadSlots 함수의 로직은 위와 같다

SubclassOf로 설정한 멤버변수로부터 3개의 인스턴스를 생성하여 멤버변수를 설정하고 TMap에 저장한다

 

 

GetLoadSlotViewModelByIndex 함수의 로직은 위와 같다

TMap 멤버변수로부터 찾고자 하는 슬롯 ViewModel을 반환한다

 

4) LoadScreenWidget 클래스

 

슬롯을 갖고 있는 래퍼 ViewModel을 사용하는 UserWidget 클래스를 위와 같이 생성한다

BlueprintInitializeWidget 함수를 추가하고 블루프린트에서 로직을 작성한다

 

1 - 5) LoadScreenHUD 클래스

 

1 - 4)의 UserWidget을 사용하는 HUD 클래스를 위와 같이 생성한다

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

  • LoadScreenWidgetClass 멤버변수 : LoadScreenWidget의 인스턴스를 생성할 클래스
  • LoadScreenWidget 멤버변수 : LoadScreenWidget의 인스턴스
  • LoadScreenViewModelClass 멤버변수 : UserWidget에서 사용할 ViewModel의 인스턴스를 생성할 클래스
  • LoadScreenViewModel 멤버변수 : UserWidget에서 사용할 ViewModel의 인스턴스

 

 

BeginPlay 함수의 로직은 위와 같다

  • 부모 버전의 함수를 호출
  • UserWidget에서 사용할 ViewModel의 인스턴스 생성 + 인스턴스로부터 InitializeLoadSlots 함수 호출
  • UserWidget의 인스턴스 생성 + 인스턴스를 Viewport에 추가 + BlueprintInitializeWidget 함수 호출

 

- 블루프린트 사이드

1) 2개의 ViewModel의 블루프린트

 

MVVM_LoadSlot 클래스와 MVVM_LoadScreen 클래스에 대한 블루프린트를 생성한다

 

 

MVVM_LoadScreen의 블루프린트에서는 위와 같이 멤버변수를 설정한다

 

2) WBP_LoadScreenWidget_Base 블루프린트

 

데이터를 저장하고 불러올 UI들의 조상 클래스를 생성하고

FindLoadScreenViewModel 함수를 위와 같이 정의하여 HUD로부터 래퍼 ViewModel을 가져오도록 설정한다

 

3) 슬롯 UI 블루프린트

Designer 탭에서 Window - ViewModels 창 활성화

 

ViewModels 창에서 데이터 바인딩할 데이터와 ViewModel 연결

 

데이터를 저장하고 불러올 슬롯 UI들의 블루프린트에서

사용할 ViewModel과 데이터 바인딩을 하기 위한 데이터를 제공할 하위 UI들을 연결한다

 

4) WBP_LoadScreen 블루프린트

 

Construct 이벤트를 위와 같이 정의하여 버튼을 누르면 메인 화면으로 돌아갈 수 있도록 설정한다

 

 

BlueprintInitializeWidget 이벤트를 위와 같이 정의하여 

갖고 있는 데이터 슬롯 UI들로부터 InitializeSlot 함수를 호출한다

 

5) BP_LoadScreenHUD 블루프린트 + BP_LoadScreenGameMode 블루프린트

1) BP_LoadScreenHUD 블루프린트

 

사용할 ViewModel을 위와 같이 설정한다

 

2) BP_LoadScreenGameMode 블루프린트

 

사용할 HUD를 위와 같이 설정한다

 

- 최종 실행 결과

 

728x90
반응형