- 개요
스킬 포인트를 소모하여 강화한 스킬의 GameplayAbility 정보를 저장하고 불러올 수 있도록 설계한다
- C++ 사이드
1) DefaultGameplayTags.ini

4가치 Primary 능력치에 따라 나머지 스탯을 설정하는 이벤트의 Tag를 추가한다
2) LoadScreenSaveGame 클래스

게임 데이터에 저장할 GameplayAbility를 래핑한 SavedAbility 구조체를 추가한다
구성은 다음과 같다
- GameplayAbility 멤버변수 : 저장할 GameplayAbility
- AbilityTag 멤버변수 : 해당 GA의 Tag
- AbilityStatus 멤버변수 : 해당 GA의 상태의 Tag
- AbilitySlot 멤버변수 : 해당 GA의 슬롯의 Tag
- AbilityType 멤버변수 : 해당 GA의 스킬타입의 Tag
- AbilityLevel 멤버변수 : 해당 GA의 스킬레벨
== 연산자를 오버로딩하여 동일한지 비교하는 연산을 수행할 수 있도록 설정한다

LoadScreenSaveGame 클래스에 SavedAbility의 TArray를 멤버변수로 추가한다
3) AuraAbilitySystemComponent 클래스

AddCharacterAbilitiesFromSaveData 함수를 추가하여 저장된 게임 데이터를 사용하여 GA를 부여한다

AddCharacterAbilitiesFromSaveData 함수의 로직은 위와 같다
인자로 받은 SaveData의 SavedAbilities를 순회하면서 로직을 수행한다
- 순회중인 SavedAbility로부터 GA를 가져오고 GASpec을 생성
- 생성한 GASpec에 슬롯 Tag + 상태 Tag를 부여
- 순회중인 SavedAbility의 스킬 타입을 확인하여 다음의 동작 수행
- 공격 스킬이라면 그대로 어빌리티를 부여
- 패시브 스킬이면서 + 착용중이라면 : 어빌리티를 부여하면서 발동 + MulticastActivatePassiveEffect 함수 호출
- 패시브 스킬이면서 + 착용중이 아니라면 : 어빌리티를 부여
순회가 끝나고 bStartupAbilitiesGiven 변수를 True로 설정하고
AbilitiesGivenDelegate 델리게이트를 브로드캐스트한다

ServerEquipAbility 함수에 위의 로직을 추가하여 스킬의 상태를 장착 상태로 변경한다
4) PassiveNiagaraComponent 클래스


ActivateIfEquipped 함수를 추가하여 위와 같이 로직을 구성한다
게임이 시작하면서 어빌리티가 부여되었는지 확인 + 패시브 스킬의 상태가 장착 상태인지 확인하여 Niagara를 재생한다

BeginPlay 함수에 ActivateIfEquipped 함수를 호출하는 로직을 추가한다
5) AuraCharacter 클래스

ServerLoadProgress 함수에 위와 같이 로직을 추가하여 저장된 데이터를 사용하여 스킬의 GA를 부여한다

ServerSaveProgress 함수에 위와 같이 로직을 추가하여
ForEachAbility 델리게이트를 생성하여 SavedAbility 인스턴스를 생성하고 설정하여
SaveGame 클래스의 SavedAbilities에 저장하는 콜백함수를 바인드하고
발동가능한 어빌리티들을 대상으로 생성한 델리게이트에 넘겨주어 실행한다
- 블루프린트 사이드
1) GA_ListenForEvent 블루프린트

해당 GA 블루프린트의 AssetTags를 위와 같이 설정한다
2) DA_AbilityInfo 데이터애셋

GA_ListenForEvent 블루프린트에 대한 설정을 추가한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 게임 맵 - 1) 커서 동작 수정 (0) | 2026.01.09 |
|---|---|
| 체크 포인트 - 최종) 월드 저장하고 불러오기 (0) | 2026.01.09 |
| 체크 포인트 - 2) PlayerState가 소유하고 있는 데이터 저장 + 불러오기 (0) | 2026.01.01 |
| 체크 포인트 - 1) 체크 포인트의 위치를 기준으로 게임 불러오기 (0) | 2025.12.28 |
| 저장 시스템 - 최종) 저장된 게임 데이터를 사용하여 맵 불러오기 (0) | 2025.12.27 |