0. 개요
각 어빌리티의 태그를 사용하여 스펠 트리에 어빌리티를 표시한다.
1. 스펠 트리에 어빌리티 표시하기
(1) WBP_SpellGlobe_Button에서 어빌리티 태그 멤버 변수 생성
각 어빌리티의 태그를 이용하여 어빌리티 정보를 가져오기 위해 멤버 변수를 생성한다.
(2) WBP_OffensiveSpellTree에서 각 글로브에 어빌리티 태그 지정
스펠 트리의 1번 열은 불, 2번 열은 전기, 3번 열은 아케인 타입의 스펠로 지정할 것이다.
각 글로브를 모두 선택하여 변수로 지정한다.
(2-1) 모든 글로브에 위젯 컨트롤러 설정하기
(3) WBP_SpellMenu에서 스펠 트리를 변수로 지정
(3-1) 스펠 트리에 위젯 컨트롤러 설정
이제 스펠 메뉴의 위젯 컨트롤러 -> 스펠 트리의 위젯 컨트롤러 -> 스펠 글로브의 위젯 컨트롤러 순으로 설정이 된다.
2. 글로브에 어빌리티의 이미지, 배경을 띄우기
어빌리티 정보(AbilityInfo) 델리게이트 활용하여 어빌리티 정보를 가져오고 글로브 아이콘에 표시한다.
(1) WBP_SpellGlobe_Button에서 위젯 컨트롤러 캐스팅하기
최상위 부모인 Spell Menu의 위젯 컨트롤러를 블루프린트 버전으로 캐스팅하여 멤버 변수로 저장한다.
블루프린트 이벤트 델리게이트인 AbilityInfoDelegate를 사용할 것이다.
(2) AbilityInfoDelegate 이벤트
(2-1) AbilityInfo.h에서 AbilityInfo 구조체 변경
어빌리티 정보 구조체가 어빌리티의 상태를 나타내는 게임플레이 태그인 Abilties.Status를 변수로 가지도록 해야 한다.
USTRUCT(BlueprintType)
struct FAuraAbilityInfo
{
GENERATED_BODY()
// 스펠 태그
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FGameplayTag AbilityTag = FGameplayTag();
// 입력 태그
UPROPERTY(BlueprintReadOnly)
FGameplayTag InputTag = FGameplayTag();
// 어빌리티 상태 태그
UPROPERTY(BlueprintReadOnly)
FGameplayTag StatusTag = FGameplayTag();
어빌리티 상태 태그(이하 상태 태그)는 게임 실행 중 동적으로 변경되어야 한다.
따라서 이 구조체를 사용하는 데이터 에셋 등에서 변경하지 않고 게임에 의해 지정되도록 BlueprintReadOnly로 지정한다.
(2-2) AbilityInfo에 StatusTag 채워서 보내기
void UAuraWidgetController::BroadcastAbilityInfo()
{
// 어빌리티가 주어지지 않았다면 리턴
if (!GetAuraASC()->bStartupAbilitiesGiven)
return;
// 어빌리티를 순회하지 않고 델리게이트를 사용
// 콜백 함수 바인딩
FForEachAbility BroadcastDelegate;
BroadcastDelegate.BindLambda([this](const FGameplayAbilitySpec& AbilitySpec)
{
// 태그를 이용해서 어빌리티 정보 가져오기
FAuraAbilityInfo Info = AbilityInfo->FindAbilityInfoForTag(GetAuraASC()->GetAbilityTagFromSpec(AbilitySpec));
// 어빌리티에 입력 태그 및 상태 태그 부여
Info.InputTag = GetAuraASC()->GetInputTagFromSpec(AbilitySpec);
Info.StatusTag = GetAuraASC()->GetStatusFromSpec(AbilitySpec);
// 블루프린트 델리게이트로 전송
AbilityInfoDelegate.Broadcast(Info);
});
AbilityInfo 구조체의 내용을 채워 보내는 것은 Spell Menu의 위젯 컨트롤러의 BroadcastInitialValues 안에서 호출된 AuraWidgetController의 BroadcastAbilityInfo 함수이다.
어빌리티 스펙을 이용하여 입력 태그를 부여하는 작업 아래에 상태 태그를 찾아 부여하도록 코드를 작성한다.
(2-3) WBP_SpellGlobe_Button 블루프린트 이벤트 그래프
이제 어빌리티 정보를 받아 상태 태그, 아이콘, 배경을 로컬 변수로 저장하는 함수를 생성한다.
Ability Tag는 글로브에 할당된 어빌리티 태그를 말한다.
어빌리티 정보의 어빌리티 태그와 글로브의 어빌리티 태그가 일치하면 브랜치가 작동하게 된다.
각 어빌리티 상태 태그를 확인하여 글로브의 아이콘과 배경을 변경하게 한다.
이 함수들은 간단하게 아이콘과 배경의 텍스쳐와 머테리얼을 변경한다.
이제 이미 습득한 상태인 파이어볼트가 스펠 메뉴에 노출된다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
22-11. 스펠 메뉴 UI - (11) 스펠 메뉴에 스펠 포인트 표시 (0) | 2025.02.06 |
---|---|
22-10. 스펠 메뉴 UI - (10) 어빌리티 레벨 요구 사항, 새로운 전기(Lightning) 스펠, 스펠 메뉴에 어빌리티 상태 변경 (0) | 2025.02.05 |
22-8. 스펠 메뉴 UI - (8) 어빌리티 상태(Ability Status) - 게임플레이 태그 (0) | 2025.02.05 |
22-7. 스펠 메뉴 UI - (7) 스펠이 장착된 버튼 (0) | 2025.02.04 |
22-6. 스펠 메뉴 UI - (6) 스펠 메뉴 위젯 컨트롤러와 Getter, meta = DefaultToSelf (0) | 2025.01.23 |