최대 1 분 소요

   

1. 사용이유

특정 객체가 FGameplayTagContainer를 가지고 있을 때 IGameplayTagAssetInterface 를 상속시키면 해당 객체가 소유한 GameplayTag에 관해서 여러 방식으로 접근할 수 있다        

2. IGameplayTagAssetInterface 사용방식

2-1. GameplayTag 상속

UCLASS()  
class D1_API AMasterAI : public ACharacter, ... , public IGameplayTagAssetInterface  
{  
    GENERATED_BODY()
    ...
}

   

2-2. GetOwnedGameplayTags 오버라이딩

protected:
	// Inherited via IGameplayTagAssetInterface  
	// 가지고있는 Contanier를 넘겨줌
	virtual void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override { TagContainer = OwnedGameplayTags; }

private:
	FGameplayTagContainer OwnedGameplayTags; // 이 객체가 소유한 GameplayContainer

   

2-3. 사용방법

UFUNCTION(BlueprintCallable, Category=GameplayTags)  
virtual bool HasMatchingGameplayTag(FGameplayTag TagToCheck) const;

UFUNCTION(BlueprintCallable, Category=GameplayTags)  
virtual bool HasAllMatchingGameplayTags(const FGameplayTagContainer& TagContainer) const;

UFUNCTION(BlueprintCallable, Category=GameplayTags)  
virtual bool HasAnyMatchingGameplayTags(const FGameplayTagContainer& TagContainer) const;

미리 정의된 함수들을 그대로 사용해서 가져올 수 있다

IGameplayTagAssetInterface* CurActor = Cast<IGameplayTagAssetInterface>(SensoredActor); //Player가 아닌 Actor는 탐지되도 반응 없게 함  
if(!CurActor)  
    continue;  
if(!CurActor->HasMatchingGameplayTag(FCombatGameplayTags::Get().Character_Player))  
    continue;

사용할 때는 Cast를 이용해서 원하는 함수를 호출하면 됨

댓글남기기