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

저장 시스템 - 5) 저장된 데이터 슬롯 삭제

monstro 2025. 12. 27. 16:35
728x90
반응형

- 개요

게임 데이터가 저장된 데이터 슬롯을 선택하여 제거할 수 있는 기능을 추가한다

데이터 슬롯을 선택하고 삭제 버튼을 누르면 메세지 창이 팝업되고 메세지 창을 통해 슬롯을 제거한다

 

- C++ 사이드

1) MVVM_LoadSlot 클래스

 

 

데이터 슬롯을 선택하면 삭제 버튼이나 플레이 버튼을 활성화하기 위한 EnableSelectSlotButton 델리게이트를 생성한다

해당 델리게이트는 불리언 인자를 받으며 1 : 多의 관계로 브로드캐스트하면서 블루프린트에서도 사용가능하다

생성한 델리게이트멤버변수로 추가한다

 

2) MVVM_LoadScreen 클래스

 

 

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

슬롯이 선택되었음을 전파할 SlotSelected 브로드캐스트를 생성하고 위와 같이 멤버변수로 추가한다

 

 

 

ViewModel에서 데이터 바인딩을 수행할 멤버변수를 생성하고 Getter 함수와 Setter 함수를 추가한다

해당 멤버변수는 데이터 슬롯의 개수를 의미한다

 

 

DeleteButtonPressed 함수를 생성하여 데이터 슬롯에 대한 삭제 버튼을 누른다면 호출한다

 

 

SelectedSlot 멤버변수를 추가하여 선택된 데이터 슬롯을 지정한다

 

 

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

슬롯들을 생성하고 생성한 슬롯의 개수만큼 NumLoadSlots 변수의 값을 설정한다

 

 

SelectSlotButtonPressed 함수의 로직을 위와 같이 구성한다

  • SlotSelected 델리게이트를 브로드캐스트
  • 생성된 슬롯들을 순회하면서 선택한 데이터 슬롯EnableSelectSlotButton 델리게이트로 True를 전파
    • 선택한 데이터 슬롯선택 버튼을 활성화하고 나머지는 비활성화
  • SeletedSlot 변수의 값선택한 데이터 슬롯으로 설정

 

 

DeleteButtonPressed 함수의 로직은 위와 같다

선택한 데이터 슬롯이 유효하다면 다음의 로직을 진행한다

  • GameMode로부터 선택한 데이터 슬롯의 데이터를 제거
  • 제거한 데이터 슬롯의 상태초기화
  • 제거한 데이터 슬롯의 InitializeSlot 함수 호출
  • 제거한 데이터 슬롯의 EnableSelectSlotButton 델리게이트로 False를 브로드캐스트

 

 

SetNumLoadSlots 함수의 로직은 위와 같이 매크로를 사용하여 ViewModel에서 데이터 바인딩할 변수를 설정한다

 

3) AuraGameModeBase 클래스

 

DeleteSlot 함수를 새롭게 추가한다

 

 

DeleteSlot 함수의 로직은 위와 같이 구성하였다

제거할 게임의 데이터가 존재한다면 제거한다

 

- 블루프린트 사이드

1) WBP_LoadSlot_Taken 위젯 블루프린트

 

BlueprintInitializeWidget 이벤트를 위와 같이 구성하여

데이터 슬롯의 선택 버튼이 클릭되면 SelectSlotButtonPressed 함수를 호출하도록 설정하고

EnableSelectSlotButton 델리게이트에 이벤트를 바인드하여 선택 버튼을 활성화 / 비활성화한다 

 

2) WBP_AreYouSure 위젯 블루프린트

2 - 1) CenteredXPosition 함수

 

CenteredXPosition 함수의 로직은 위와 같이 구성하여 (뷰포트의 가로축 절반 - 위젯의 가로축 절반)의 값을 반환한다

반환된 값을 사용하여 위젯을 뷰포트의 중심에 배치할 수 있다

 

2 - 2) EventGraph

 

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

취소 버튼을 클릭하면 해당 위젯을 부모로부터 제거하도록 설정한다

삭제 버튼을 클릭하면 DeleteButtonClicked 함수를 호출하고 부모로부터 제거하도록 구성한다

 

3) WBP_LoadScreen 위젯 블루프린트

3 - 1) WidgetCenteredXPosition 함수

 

WidgetCenteredXPosition 함수를 위와 같이 정의하여 위젯을 뷰포트의 중심에 배치한다

 

3 - 2) EnablePlayAndDeleteButton 함수

 

EnablePlayAndDeleteButton 함수를 정의하여 데이터 슬롯에 대한 삭제 버튼 플레이 버튼 활성화 / 비활성화한다

 

3 - 3) EventGraph 

Construct 이벤트 - 두 번째 + 세 번째 시퀀스

 

Construct 이벤트시퀀스 노드를 추가하여 기존의 로직첫 번째 시퀀스로 구성하고

두 번째 시퀀스와 세 번째 시퀀스, 네 번째 시퀀스를 구성한다

  • 첫 번째 시퀀스 : 슬롯에 대한 실행 버튼삭제 버튼 비활성화
  • 세 번째 시퀀스 : 플레이어 입력 제한

 

Construct 이벤트 - 네 번째 시퀀스

 

Construct 이벤트 네 번째 시퀀스를 위와 같이 구성하여 슬롯의 삭제 버튼에 대한 동작을 설정한다

 

BlueprintInitializeWidget 이벤트 - 시퀀스 추가

 

BlueprintInitializeWidget 이벤트시퀀스 노드를 추가하여 기존의 로직첫 번째 시퀀스로 구성하고

선택된 데이터 슬롯삭제 버튼실행 버튼을 활성화하는 로직 두 번째 시퀀스로 추가한다

 

- 최종 실행 결과

 

728x90
반응형