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. 매핑 변경

파이어볼트 어빌리티의 입력 태그를 변경하면

이미지 뿐만 아니라 스펠 또한 변경된 키를 눌러 작동시킬 수 있다.