- 개요
레벨업하여 얻은 스킬 포인트를 스킬창 UI에서 소모하여 스킬 어빌리티를 강화할 수 있도록 설계한다
- C++ 사이드
1) AuraAbilitySystemComponent 클래스

AbilityStatusChanged 델리게이트에서 정수형의 어빌리티 레벨도 인자로 받도록 수정한다

ServerSpendSpellPoint 함수를 추가하여 스킬 포인트를 소모하면
클라이언트에서 함수를 호출하여 서버에서 처리하도록 설정한다

기존의 ClientUpdateAbilityStatus 함수에 정수형의 어빌리티 레벨을 인자로 추가하여 브로드캐스트하도록 수정한다

UpdateAbilityStatuses 함수를 위와 같이 수정하여 클라이언트에서 스킬 어빌리티 관련 정보를 브로드캐스트한다

ServerSpendSpellPoint 함수의 로직은 위와 같다
인자로 받은 Tag를 지닌 GASpec을 가져와 다음의 로직을 진행한다
- AvatarActor의 스킬 포인트를 1 감소
- 가져온 GASpec의 상태가 잠겨있지만 스킬을 부여할 수 있는 상태라면
- 상태를 잠금해제로 변경
- 가져온 GASpec의 상태가 장착되어 있거나, 잠금해제되어 있는 상태라면
- 가져온 GASpec의 레벨을 1 증가
- 이후 ClientUpdateAbilityStatus 함수를 호출하여 클라이언트에서 스킬 어빌리티 관련 정보 브로드캐스트
- MarkAbilitySpecDirty 함수를 호출하여 가져온 GASpec이 변경되었음을 기록

ClientUpdateAbilityStatus 함수에서는 스킬 어빌리티의 레벨도 브로드캐스트할 수 있도록 수정한다
2) SpellMenuWidgetController 클래스

SelectedAbility 구조체를 추가하여 스킬창 UI에서 선택된 스킬을 캐싱한다
선택된 스킬의 어빌리티와 상태를 기록하도록 멤버변수를 구성하였다

SpendPointButtonPressed 함수를 추가하여 버튼 UI를 눌러 갖고 있는 스킬 포인트를 소모할 수 있도록 한다

SelectedAbility 구조체의 인스턴스를 멤버변수로 추가하고, 위와 같이 초기화한다
또, CurrentSpellPoints 멤버변수를 추가하여 갖고 있는 스킬 포인트를 저장한다

BindCallbacksToDependencies 함수를 위와 같이 수정한다
우선, AbilityStatusChanged 델리게이트를 통해 스킬 어빌리티의 레벨을 브로드캐스트하도록 수정한다
이미 스킬창 UI에서 선택한 스킬의 상태가 변경된 경우 해당 스킬에 대한 UI를 갱신하는 로직을 추가하고,
스킬 포인트가 변경된 경우 현재 스킬 포인트를 저장하고 마찬가지로 UI를 갱신하는 로직을 추가한다

SpellGlobeSelected 함수에서 선택한 스킬 UI의 스킬 관련 정보를 캐싱하는 로직을 추가한다

SpendPointButtonPressed 함수는 스킬 포인트 소모 버튼 UI에 연동하여 스킬 포인트를 소모한다
- 블루프린트 사이드
1) WBP_SpellPoints 위젯 블루프린트

Construct 이벤트의 3번째 시퀀스에 로직을 추가하여 버튼 UI를 클릭한 후에 스킬 포인트를 소모한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 스킬창 UI - 8) 스킬 타입 부여 (0) | 2025.11.08 |
|---|---|
| 스킬창 UI - 7) 스킬창 UI를 이용한 스킬의 정보 표현 (0) | 2025.11.07 |
| 스킬창 UI - 5) 스킬 포인트와 스킬 창 UI 연결 (0) | 2025.11.02 |
| 스킬창 UI - 4) 플레이어 레벨과 스킬 연동 + 스킬과 스킬창 UI 연동 (0) | 2025.11.02 |
| 스킬창 UI - 3) 스킬의 상태와 스킬창 UI 연동 (0) | 2025.11.01 |