- 개요
게임의 데이터를 저장하면서 추가적으로 PlayerState가 소유하고 있는 데이터를 저장하도록 설계하고
또 저장된 데이터를 불러와 PlayerState에 반영하도록 설계한다
- C++ 사이드
1) LoadScreenSaveGame 클래스

SaveGame 클래스에 위와 같이 멤버변수를 추가한다
- bFirstTimeLoadIn 멤버변수 : 게임 최초로 데이터를 불러오는 용도로 사용
- PlayerLevel 멤버변수 : 현재 플레이어의 레벨
- XP 멤버변수 : 현재 플레이어의 경험치
- SpellPoints 멤버변수 : 현재 플레이어의 스킬 포인트
- AttributePoints 멤버변수 : 현재 플레이어의 능력치 포인트
- Strength + Intelligence + Resilience + Vigor 멤버변수 : 현재 플레이어의 4가지 기초 능력치
2) AuraPlayerState 클래스


플레이어의 레벨이 변경되면 브로드캐스트를 수행하는 OnLevelChanged 델리게이트를 추가한다
정수와 불리언의 2개의 인자를 사용하면서 1 : 多의 관계로 전파하며 블루프린트에서도 사용할 수 있도록 설정한다
추가한 델리게이트를 새로운 멤버변수로 사용한다


레벨에 대해서 증감 + 설정하는 함수의 경우 False 값을 사용하여 브로드캐스트한다

레벨이 상승하면 호출하는 콜백 함수의 경우 True 값을 사용하여 브로드캐스트한다
3) MVVM_LoadScreen 클래스

NewSlotButtonPressed 함수에 위와 같이 로직을 추가하여
최초로 생성되어 데이터를 저장하는 데이터 슬롯의 플레이어 레벨을 1로 설정한다

LoadData 함수에 위와 같이 로직을 추가하여 저장된 데이터를 로드한 데이터 슬롯의 플레이어 레벨을 설정한다
4) OverlayWidgetController 클래스


PlayerState와 동일하게 동작하는 OnLevelChangedSignature 델리게이트를 생성하고
기존의 델리게이트를 새롭게 생성한 델리게이트로 교체한다

BindCallbacksToDependencies 함수를 위와 같이 수정하여 교체한 델리게이트에 맞춰서 브로드캐스트한다
5) CharacterClassInfo 클래스


Tag와 연결된 4가지 기초 능력치의 값을 설정하는 GameplayEffect의 멤버변수를 추가하고
기초 능력치를 토대로 부가 능력치의 값을 영구히 설정하는 GameplayEffect의 멤버변수를 추가한다
6) AuraAbilitySystemLibrary 클래스

InitializeDefaultAttributesFromSaveData 함수를 새롭게 추가한다
저장된 게임 데이터를 사용하여 플레이어의 능력치를 설정한다

InitializeDefaultAttributesFromSaveData 함수의 로직은 위와 같다
- 캐릭터의 직업 타입에 맞춰 저장된 게임 데이터의 값으로 Primary 능력치의 값을 설정하고 적용
- 캐릭터의 직업 타입에 맞춰 Secondary 능력치의 값을 설정하고 적용
- 캐릭터의 직업 타입에 맞춰 Vital 능력치의 값을 설정하고 적용
7) AuraCharacter 클래스

서버에서 수행하는 RPC 함수를 2개 추가하여 게임 데이터를 불러오고 저장한다


SaveProgress 함수를 위와 같이 수정하여 내부에서 ServerSaveProgress 함수를 호출하도록 설정한다
ServerSaveProgress 함수의 로직은 기존의 SaveProgress 함수와 동일하되 로직을 추가한다
- PlayerState를 가져와 레벨 + 경험치 + 능력치 포인트 + 스킬 포인트를 SaveData에 설정
- 4가지 기초 능력치의 값을 가져와 SaveData에 설정

ServerLoadProgress 함수의 로직은 위와 같다
GameMode -> SaveGame을 가져와 데이터를 불러온다
- 게임 최초로 데이터를 불러오는 경우 : 기본값으로 플레이어의 상태를 설정
- 그렇지 않은 경우 : 가져온 SaveGame의 데이터를 사용하여 플레이어의 상태를 설정

PossessedBy 함수에 위의 로직을 추가하여 저장된 데이터를 불러와 플레이어의 상태를 설정한다
- 블루프린트 사이드
1) GE_PrimarySetByCaller 블루프린트

4개의 Primary 능력치를 SetByCaller 모디파이어로 설정하는 GameplayEffect 블루프린트를 생성한다
2) DA_CharacterClassInfo 데이터애셋

PrimaryAttributesSetByCaller 멤버변수를 위와 같이 설정한다
3) WBP_ValueGlobe 위젯 블루프린트

OnPlayerLevelChangedDelegate를 통해 전파된 플레이어의 레벨을 UI에 반영한다
4) WBP_Overlay 위젯 블루프린트
4 - 1) EventGraph - WidgetControllerSet 이벤트의 3번째 시퀀스

OnPlayerLevelChangedDelegate를 통해 브로드캐스트된 인자가 True라면 HandleLevelUpMessage 함수를 호출한다
4 - 2) HandleLevelupMessage 함수

함수의 구성은 이전과 동일하다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 체크 포인트 - 최종) 월드 저장하고 불러오기 (0) | 2026.01.09 |
|---|---|
| 체크 포인트 - 3) GameplayAbility 저장 + 불러오기 (0) | 2026.01.02 |
| 체크 포인트 - 1) 체크 포인트의 위치를 기준으로 게임 불러오기 (0) | 2025.12.28 |
| 저장 시스템 - 최종) 저장된 게임 데이터를 사용하여 맵 불러오기 (0) | 2025.12.27 |
| 저장 시스템 - 5) 저장된 데이터 슬롯 삭제 (0) | 2025.12.27 |