0. 개요
오버레이 위젯 컨트롤러에서 C++ 코드를 통해 어빌리티 정보를 델리게이트를 이용해 위젯으로 넘겼다.
이제 위젯 블루프린트에서 해당 델리게이트를 이용해 정보를 표시한다.
1. 스펠 글로브에 어빌리티 정보 표시하기
(1) BP_OverlayWidgetController 가져오기
C++ 위젯 컨트롤러를 캐스팅하여 블루프린트 버전으로 가져와 변수로 저장한다.
(2) WBP_HealthManaSpell 에서 스펠 글로브를 변수화
(2-1) WBP_SpellGlobe 스펠 글로브에 멤버 변수 생성
각 스펠 글로브가 고유의 입력 태그를 가지도록 InputTag(Gameplay Tag 타입)을 멤버 변수로 생성한다.
(2-2) WBP_HealthManaSpell에서 스펠 글로브에 입력 태그 지정하기
(3) WBP_HealthManaSpell 에서 어빌리티 정보를 받는 함수 생성
C++의 델리게이트를 통해 받은 AbilityInfo를 분해하여 스펠 글로브의 아이콘과 배경을 설정하는 작업이다.
(4) GA_Firebolt 게임플레이 어빌리티에 태그 부여
(5) WBP_HealthManaSpell 에서 각 스펠 글로브에 위젯 컨트롤러 연결
이제 게임을 실행하면 왼쪽 마우스 버튼에 파이어볼트가 할당된 모습을 볼 수 있다.
2. 멀티 플레이어 디버그
이제 멀티 플레이어 환경에서 실행하면 클라이언트의 스펠 글로브가 정상적으로 나타나지 않는다.
이는 Aura 어빌리티 시스템 컴포넌트의 AddCharacterAbilities 함수가 서버에서만 작동하기 때문이다.
void UAuraAbilitySystemComponent::AddCharacterAbilities(const TArray<TSubclassOf<UGameplayAbility>>& StartupAbilities)
{
for (TSubclassOf<UGameplayAbility> AbilityClass : StartupAbilities)
{
// 게임플레이 어빌리티 스펙 생성
FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass, 1);
if (const UAuraGameplayAbility* AuraAbility = Cast<UAuraGameplayAbility>(AbilitySpec.Ability))
{
AbilitySpec.DynamicAbilityTags.AddTag(AuraAbility->StartupInputTag);
GiveAbility(AbilitySpec);
}
}
bStartupAbilitiesGiven = true;
AbilitiesGivenDelegate.Broadcast(this);
}
GiveAbility로 어빌리티를 부여하면 Activatable Abilities(활성화 가능한 어빌리티) 컨테이너가 복제된다.
클라이언트는 OnRep_ActivateAbilities 함수를 오버라이드하여 사용하면 된다.
protected:
// 어빌리티가 클라이언트로 복제(Replicated)
virtual void OnRep_ActivateAbilities() override;
void UAuraAbilitySystemComponent::OnRep_ActivateAbilities()
{
Super::OnRep_ActivateAbilities();
// 어빌리티가 처음 부여될 때만 발동
if (bStartupAbilitiesGiven == false)
{
bStartupAbilitiesGiven = true;
AbilitiesGivenDelegate.Broadcast(this);
}
}
이제 클라이언트에서도 아이콘과 어빌리티가 잘 뜨는 것을 볼 수 있다.
3. 매핑 변경
파이어볼트 어빌리티의 입력 태그를 변경하면
이미지 뿐만 아니라 스펠 또한 변경된 키를 눌러 작동시킬 수 있다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
19-8. 비동기 태스크 - 스펠 글로브로 쿨다운 전달하기 (0) | 2025.01.14 |
---|---|
19-7. 게임플레이 어빌리티 코스트 & 쿨다운, 몽타주 디버그 (0) | 2025.01.14 |
19-5. 오버레이 UI - (5) 오버레이 위젯 컨트롤러에서 위젯으로 어빌리티 정보 보내기 (0) | 2025.01.13 |
19-4. 오버레이 UI - (4) 어빌리티 정보 데이터 에셋 (0) | 2025.01.13 |
19-3. 오버레이 UI - (3) 경험치 바 (0) | 2025.01.13 |