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

스킬창 UI - 3) 스킬의 상태와 스킬창 UI 연동

monstro 2025. 11. 1. 18:27
728x90
반응형

- 개요

프로젝트에서 사용하는 스킬들에 다음과 같이 상태를 추가한다

  • 1) 스킬이 현재 잠겨있는 상태
  • 2) 잠겨있지만 스킬을 부여할 수 있는 상태
  • 3) 스킬이 잠금해제된 상태
  • 4) 스킬이 부여된 상태

 

위와 같이 추가한 4개의 상태에 대응하는 Tag들은 다음과 같다

  • 1) Abilities.Status.Locked
  • 2) Abilities.Status.Eligible
  • 3) Abilities.Status.Unlocked
  • 4) Abilities.Status.Equipped

 

스킬의 상태의 Tag들스킬창 UI와 연동하고 또, 스킬창 UI의 Manager 클래스를 설정하는 로직을 추가한다

 

- C++ 사이드

1) AuraGameplayTags 클래스

추가한 Tag들 (1)

 

추가한 Tag들 (2)

 

 

위와 같이 어빌리티와 관련된 Tag들을 추가하고, 추가한 Tag들을 실제로 생성하는 로직을 추가한다

추가한 Tag들을 정리하면 다음과 같다

  • InputTag.Passive : 패시브형 어빌리티
  • Abilities.HitReact : 피격과 관련된 어빌리티
  • Abilities.Status : 스킬 어빌리티의 상태
  • Abilities.Type : 어빌리티의 타입

 

2) AuraAbilitySystemLibrary 클래스

 

 

스킬창 UI의 매니저반환하는 GetSpellMenuWidgetController 함수를 추가한다

 

3) AbilityInfo 클래스 - AuraAbilityInfo 구조체

 

AuraAbilityInfo 구조체어빌리티의 상태를 의미하는 StatusTag 멤버변수를 추가한다

 

4) AuraAbilitySystemComponent 클래스

 

 

GetStatusFromSpec 함수를 새롭게 추가한다

해당 함수를 호출하여 인자로 넘겨준 GESpec으로부터 "Abilities.Status"의 태그를 가져와 어빌리티의 상태를 판단한다

 

 

AddCharacterAbilities 함수에 위의 로직을 추가한다

GA를 부여하기 이전해당 GA의 GASpec에 "Abilities.Status.Equipped" 태그를 부여한다

 

5) AuraWidgetController 클래스

 

BroadcastAbilityInfo 함수에 위의 로직을 추가하여 GameplayAbility에 부여된 StatusTag를 브로드캐스트한다

 

6) SpellMenuWidgetController 클래스

 

UCLASS에 BlueprintTypeBlueprintable 속성을 수식하여 블루프린트로 생성할 수 있도록 설정한다

 

 

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

BroadcastAbilityInfo 함수를 호출하여 하위 UI들에게 GA와 관련한 정보를 브로드캐스트한다

 

7) AuraHUD 클래스

 

스탯창 UI를 설정하기 위한 멤버변수를 2개 추가한다

 

 

 

GetSpellMenuWidgetController 함수를 추가하여 위와 같이 구성한다

스탯창 UI를 Owner 하여 스탯창 UI의 매니저를 생성하고 설정한다

 

- 블루프린트 사이드

1) BP_SpellMenuWidgetController 블루프린트

 

AbilityInfo 멤버변수를 설정한다

 

2) BP_AuraHUD 블루프린트

 

SpellMenuWidgetControllerClass 멤버변수를 위와 같이 설정한다

 

3) WBP_SpellGlobe_Button 위젯 블루프린트

해당 위젯은 스킬창에서 스킬을 담은 슬롯을 의미한다

 

WidgetControllerSet 이벤트

 

WidgetControllerSet 이벤트의 로직을 위와 같이 구성하였다

BPSpellMenuWidgetController 멤버변수를 설정한 후에,

ReceiveAbilityInfo 함수를 해당 멤버변수의 AbilityInfoSignature 델리게이트에 바인드한다

 

ReceiveAbilityInfo 함수

 

ReceiveAbilityInfo 함수의 로직은 위와 같다

델리게이트의 인자로 전달된 AuraAbilityInfo를 통해 UI의 구성요소들을 설정한다

이후 "Abilities.Status" 태그의 값에 따라 스킬 슬롯을 표현한다

 

4) WBP_EquippedRow_Button 위젯 블루프린트

해당 위젯은 부여된 스킬의 슬롯을 의미한다

 

WidgetControllerSet 이벤트

 

WidgetControllerSet 이벤트의 로직을 위와 같이 구성하였다

BPSpellMenuWidgetController 멤버변수를 설정한 후에,

ReceiveAbilityInfo 함수를 해당 멤버변수의 AbilityInfoSignature 델리게이트에 바인드한다

 

ReceiveAbilityInfo 함수

 

ReceiveAbilityInfo 함수의 로직은 위와 같다

델리게이트의 인자로 전달된 AuraAbilityInfoInputTag를 비교하여 부여된 스킬의 슬롯의 구성요소들을 설정한다

 

5) WBP_SpellMenu 위젯 블루프린트

Construct 이벤트

 

Construct 이벤트3 / 4번째 시퀀스에 위의 로직을 추가한다

 

- 최종 실행 결과

 

728x90
반응형