# Why the heck is IGameplayTagAssetInterface NOT exposed to Blueprints...

**URL:** <https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819>\
**Category:** Feedback & Requests\
**Tags:** unreal-engine\
**Created:** [September 12, 2017, 11:34am UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819 "2017-09-12T11:34:12Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![VictorBurgos](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/victorburgos/32/1008648_2.png) [@VictorBurgos](https://forums.unrealengine.com/u/VictorBurgos)\
**Post date:** [September 12, 2017, 11:34am UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/1 "2017-09-12T11:34:12Z")

</div>

So, call me crazy. But I have these three **awesome** nodes:  
[![](https://i.gyazo.com/9e8395e185d72491e615523483f08ec1.png) ](https://i.gyazo.com/9e8395e185d72491e615523483f08ec1.png)

Yet, I can’t use them…because…  
[![](https://i.gyazo.com/cc4b5b14d0b13854a4ebd521e261a403.png) ](https://i.gyazo.com/cc4b5b14d0b13854a4ebd521e261a403.png)

Yo… **CannotImplementInterfaceInBlueprint**

Obviously, I can just create my own actor parent class and use the darn interface and expose that to Blueprints… But… what is the reasoning behind **NOT** allowing us to do it from BP? Why even have the other nodes available then.

Unless there’s something I am missing completely from the Gameplay Tags workflow. Yes, I know there are other ways to query Gameplay Tags. But, I want Gameplay Tags in EVERY actor I use basically. So I want my parent actor class to get the interface so that I can make this system work like it should.

Actually, this is sort of bugging me that not every Actor Class has a Gameplay Tag or Container by default either. I mean we have Actor Tags/Component Tags (which I don’t see the purpose behind those anymore with this)

Anyway… last pic:

[![](https://i.gyazo.com/87a5f543ee86c604bcdc12dcab7f9451.png) ](https://i.gyazo.com/87a5f543ee86c604bcdc12dcab7f9451.png)  
 ← nani ???

---

<div class="post-metadata">

**Author:** ![SaOk](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@SaOk](https://forums.unrealengine.com/u/SaOk)\
**Post date:** [January 22, 2018, 9:11pm UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/2 "2018-01-22T21:11:49Z")

</div>

I would badly want to have the interface in my blueprint Project too. Tryed making same name interface with same functions, but EQS gameplay cant still communicate with the actors to check values. Would make EQS nicely more handy to use. But will need to try adding task after eqs to do that same check for all returned locations.

[https://answers.unrealengine.com/questions/750036/does-blueprints-support-gameplay-tags-yet.html](https://answers.unrealengine.com/questions/750036/does-blueprints-support-gameplay-tags-yet.html)

---

<div class="post-metadata">

**Author:** ![BlueMind\_Studio](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@BlueMind\_Studio](https://forums.unrealengine.com/u/BlueMind_Studio)\
**Post date:** [November 11, 2018, 2:38pm UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/3 "2018-11-11T14:38:56Z")

</div>

You need to have your BP Actor inherit from a C++ Actor with:

```auto

#include "GameplayTagAssetInterface.h"
class AFooCharacter : public ACharacter, public IGameplayTagAssetInterface

```

and add

```auto

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GameplayTags")
FGameplayTagContainer GameplayTags;

virtual void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override { TagContainer = GameplayTags; return; }

```

also extend your build.cs:

```auto

PublicDependencyModuleNames.AddRange(new string]{ "Core", ...., " **GameplayTags**" });

```

---

<div class="post-metadata">

**Author:** ![Jambax](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/jambax/32/904177_2.png) [@Jambax](https://forums.unrealengine.com/u/Jambax)\
**Post date:** [November 11, 2018, 4:20pm UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/4 "2018-11-11T16:20:39Z")

</div>

It’s probably not exposed because it’s faster and allows you to make assumptions in code - the same way the Gameplay Abilities Interface isn’t exposed to BP either.

You can cast directly to an interface so long as it is implemented in C++, but you can’t if it’s implemented in Blueprint - instead you have to follow a much slower path. You can also do more with non-blueprintable interfaces than blueprintable ones.

It could be an oversight, but sometimes you have to sacrifice a little flexibility with Blueprint for the best implementation.

---

<div class="post-metadata">

**Author:** ![BlueMind\_Studio](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@BlueMind\_Studio](https://forums.unrealengine.com/u/BlueMind_Studio)\
**Post date:** [November 12, 2018, 1:19pm UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/5 "2018-11-12T13:19:13Z")

</div>

TheJamsh, it still doesn’t make sense to provide a blueprint node which is not working, does it?

---

<div class="post-metadata">

**Author:** ![VictorBurgos](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/victorburgos/32/1008648_2.png) [@VictorBurgos](https://forums.unrealengine.com/u/VictorBurgos)\
**Post date:** [November 13, 2018, 9:36pm UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/6 "2018-11-13T21:36:16Z")

</div>

Well seeing how we’re able to expose it ourselves…it makes no sense to just not have it exposed by default is what I was getting at in the first place with all this.

---

<div class="post-metadata">

**Author:** ![spacegojira](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@spacegojira](https://forums.unrealengine.com/u/spacegojira)\
**Post date:** [November 14, 2018, 11:02am UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/7 "2018-11-14T11:02:43Z")

</div>

> [@Adnoh](#):
>
> TheJamsh, it still doesn’t make sense to provide a blueprint node which is not working, does it?

Yeah that is like hanging the cookie jar from the ceiling and watching the little kid hopelessly jump around trying to reach it.

---

<div class="post-metadata">

**Author:** ![Jambax](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/jambax/32/904177_2.png) [@Jambax](https://forums.unrealengine.com/u/Jambax)\
**Post date:** [November 14, 2018, 11:43am UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/8 "2018-11-14T11:43:19Z")

</div>

> [@Adnoh](#):
>
> TheJamsh, it still doesn’t make sense to provide a blueprint node which is not working, does it?

The nodes work just fine. The interface that they work with just has to be implemented in a C++ class rather than a Blueprint class.

As I mentioned above, exposing it means you can’t do native Casts in C++ to the interface, and have to follow a slower path. Obviously in this case, it was deemed to be too costly to follow the slower path where this interface is used. If it’s C++ only, you can do this:

```auto

IGameplayTagAssetInterface* AsInterface = Cast<IGameplayTagAssetInterface>(SomeObject);
AsInterface->InterfaceFunction();

```

If the interface can be implemented in Blueprint, C++ code needs to be adapted for that. It’s _extremely_ clunky and slow to access blueprint interfaces in code - so most of the time they aren’t exposed.

> [@VictorBurgos](#):
>
> Well seeing how we’re able to expose it ourselves…it makes no sense to just not have it exposed by default is what I was getting at in the first place with all this.

You can expose it - but any code that relies on a native cast will also break when the interface is implemented in Blueprint, because the cast will fail.

**TL;DR, Blueprint-Implementable Interfaces are slow.**

---

<div class="post-metadata">

**Author:** ![Starkium](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/starkium/32/1194588_2.png) [@Starkium](https://forums.unrealengine.com/u/Starkium)\
**Post date:** [February 19, 2021, 9:13pm UTC](https://forums.unrealengine.com/t/why-the-heck-is-igameplaytagassetinterface-not-exposed-to-blueprints/99819/9 "2021-02-19T21:13:46Z")

</div>

Necro, but they should have also supplied a node to get the container from an actor so you can call add and remove tags from outside that actor. Instead I have to extend the interface or make a new one just for that one dumb thing.
