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

스킬창 UI - 5) 스킬 포인트와 스킬 창 UI 연결

monstro 2025. 11. 2. 21:17
728x90
반응형

- 개요

플레이어가 레벨업하여 얻은 스킬 포인트를 스킬 창 UI와 연결하고, 스킬 창 UI에 클릭 시 효과를 추가한다

 

- C++ 사이드

1) AuraGameplayTags 클래스

 

 

어빌리티가 설정되지 않은 스킬을 의미하는 Tag를 추가하고 실제로 생성한다

 

2) SpellMenuWidgetController 클래스

 

SpellGlobeSelectedSignature 델리게이트를 새롭게 추가한다

2개의 불리언 인자를 받아 동작하고 C++과 블루프린트 양쪽에서 사용할 수 있으며 1 : 多 관계로 브로드캐스트한다

 

 

2개의 델리게이트 멤버변수를 추가한다

 

 

또한 2개의 함수를 추가한다

 

 

BroadcastInitialValues 함수의 로직을 위와 같이 수정하여 플레이어의 스킬 포인트를 브로드캐스트한다

 

 

BindCallbacksToDependencies 함수를 위와 같이 수정하여

PlayerState에서 스킬 포인트가 변경되면 SpellPointsChanged 델리게이트를 브로드캐스트하도록 설정한다

 

 

SpellGlobeSelected 함수의 로직은 위와 같다

인자로 들어온 Tag에 대해서 다음의 조건을 판단한다

  • Tag가 유효하지 않음 + Tag를 어빌리티에 설정하지 않음 + Tag를 사용하는 GASpec이 없음
    • 어빌리티의 상태의 Tag를 "Abilities.Status.Locked"로 설정
  • 위의 3가지 조건을 하나도 만족하지 않음
    • 어빌리티의 상태를 Tag를 사용하는 GASpec의 상태로 설정

 

위와 같이 처리한 이후 ShouldEnableButtons 함수를 호출하고,

SpellGlobeSelectedDelegate 멤버변수에 생성한 2개의 불리언 변수를 넘겨 브로드캐스트한다

 

 

ShouldEnableButtons 함수의 로직은 위와 같다

각각 다음의 조건에 따라 처리한다

  • 인자로 들어온 Tag가 "Abilities.Status.Equipped"인 경우 
    • 해당 스킬에 대한 Equip 버튼활성화
    • 스킬 포인트가 1개라도 있다면, 해당 스킬에 대한 스킬 포인트 배분 버튼활성화
  • 인자로 들어온 Tag가 "Abilities.Status.Eligible"인 경우
    • 스킬 포인트가 1개라도 있다면, 해당 스킬에 대한 스킬 포인트 배분 버튼활성화
  • 인자로 들어온 Tag가 "Abilities.Status.Unlocked"인 경우
    • 해당 스킬에 대한 Equip 버튼활성화
    • 스킬 포인트가 1개라도 있다면, 해당 스킬에 대한 스킬 포인트 배분 버튼을 활성화

 

3) AuraPlayerState 클래스

 

스킬 포인트의 기본값을 0으로 변경한다

 

- 블루프린트 사이드

1) WBP_SpellGlobe_Button 위젯 블루프린트

 

하위 UI인 Button_RingSpellGlobeSelected 함수를 클릭시에 호출하도록 설정한다

 

2) WBP_OffensiveSpellTree 위젯 블루프린트

 

하위 UI들에 다른 스킬 UI를 선택하면 기존의 선택 상태를 해제하도록 설정한다

동일하게 WBP_PassiveSpellTree 위젯 블루프린트도 작업한다

 

3) WBP_SpellMenu 위젯 블루프린트

Construct 이벤트의 첫 번째 시퀀스 로직 추가

 

Construct 이벤트의 첫 번째 시퀀스에 로직을 추가한다

따라서 스킬 창 UI가 닫히면 하위 UI들에 대한 선택 상태를 모두 해제한다

 

Construct 이벤트의 두 번째 시퀀스 교체

 

Construct 이벤트의 번째 시퀀스를 교체한다

SpellGlobeSelectedDelegate 멤버변수에 SetButtonsEnabled 함수를 바인드하여

스킬의 상태에 따라 Equip 버튼스킬 포인트 분배 버튼을 활성화 / 비활성화한다

 

Construct 이벤트의 네 번째 시퀀스 교체

 

Construct 이벤트의 번째 시퀀스를 교체한다

SpellPointsChanged 멤버변수에 SpellPointsChanged 함수를 바인드하여

현재 스킬 포인트를 UI를 통해 표시한다

 

- 최종 실행 결과

 

728x90
반응형