0. 개요

이제 게임플레이 이펙트가 GAS 액터(AuraCharacter, AuraEnemy)에 적용되면 EffectApplied 함수가 호출될 것이다.

해당 함수가 호출되면 캐릭터가 보유하고 있는 모든 태그를 출력하도록 해보자.

 

 

1. 코드

(1) AuraAbilitySystemComponent

void UAuraAbilitySystemComponent::EffectApplied(UAbilitySystemComponent *AbilitySystemComponent, const FGameplayEffectSpec &EffectSpec, FActiveGameplayEffectHandle ActiveEffectHandle)
{
    // 이펙트 적용 시 무엇을 BroadCast 할 것인가??
    // Tag가 적절
    FGameplayTagContainer TagContainer;
    EffectSpec.GetAllAssetTags(TagContainer);
    for (const FGameplayTag& Tag : TagContainer)
    {
        // TODO : Widget Controller에 태그를 전달
        const FString Msg = FString::Printf(TEXT("GE Tag: %s"), *Tag.ToString());
        GEngine->AddOnScreenDebugMessage(-1, 8.f, FColor::Blue, Msg);
    }
}

EffectSpec 내에 정의된 GetAllAssetTags 함수는 FGameplayTagContainer의 참조를 반환한다.

태그 컨테이너를 저장할 변수를 만들고 for문에서 순회하여 액터가 보유한 모든 태그를 출력하도록 한다.

 

 

(2) 콜백 함수의 장점

- 콜백 함수를 이용하면 Duration Effect 뿐 아니라 Instant Effect 일 때도 태그를 부여할 수 있다.

- 하나의 이펙트가 여러개의 태그를 가질 수 있는데, 이 함수는 모든 태그를 순회하기 때문에 확장성이 뛰어나다.

-> 각 태그 상태를 UI에 적용하거나, 추가 효과를 발동하는 등의 동작이 가능