【UE】Gameplay Ability で設定できるタグの種類について

Unreal Engine

はじめに

Unreal Engine (UE) Advent Calendar 2025 の8日目の記事です!

Gameplay Ability Blueprint を作成して Class Defaults を開くと、AssetTags (Default AbilityTags) や Cancel Abilities with Tag、Block Abilities with Tag などのタグを設定することができます。
この記事では Gameplay Ability で設定できる、これらのタグの種類について解説します。

この記事の環境は以下の通りです。

  • Windows 11
  • UE 5.7.1(ランチャー版)

UE 5.7.1 時点で設定できるタグの種類は以下の10個です。

  • AssetTags (Default AbilityTags)
  • Cancel Abilities with Tag
  • Block Abilities with Tag
  • Activation Owned Tags
  • Activation Required Tags
  • Activation Blocked Tags
  • Source Required Tags
  • Source Blocked Tags
  • Target Required Tags
  • Target Blocked Tags

「AssetTags (Default AbilityTags)」というプロパティは、コードでは「AbilityTags」という名前の変数ですが、将来的に「AssetTags」という名前の private な変数に変わるそうです。
(↓参考:GameplayAbility.h)

UE_DEPRECATED_FORGAME(5.5, "Use GetAssetTags(). This is being made non-mutable, private and renamed to AssetTags in the future. Use SetAssetTags to set defaults (in constructor only).")
UPROPERTY(EditDefaultsOnly, Category = Tags, DisplayName="AssetTags (Default AbilityTags)", meta=(Categories="AbilityTagCategory"))
FGameplayTagContainer AbilityTags;

GameplayAbility.h に書かれている各変数の表示名と、そのコメントを表にまとめてみました。

プロパティ名コメント(原文)コメント(和訳)
AssetTags (Default AbilityTags)This ability has these tagsこのアビリティはこれらのタグを持っています。
Cancel Abilities with TagAbilities with these tags are cancelled when this ability is executedこれらのタグを持つアビリティはこのアビリティが実行されるとキャンセルされます。
Block Abilities with TagAbilities with these tags are blocked while this ability is activeこれらのタグを持つアビリティはこのアビリティが発動している間、ブロックされます。
Activation Owned TagsTags to apply to activating owner while this ability is active. These are replicated if ReplicateActivationOwnedTags is enabled in AbilitySystemGlobals.このアビリティが発動している間、発動所有者に適用するタグ。これらは AbilitySystemGlobals で ReplicateActivationOwnedTags が有効になっている場合にレプリケートされます。
Activation Required TagsThis ability can only be activated if the activating actor/component has all of these tagsこのアビリティは、発動しているアクター/コンポーネントがこれら全てのタグを持っている場合にのみ発動されることができます。
Activation Blocked TagsThis ability is blocked if the activating actor/component has any of these tagsこのアビリティは、発動しているアクター/コンポーネントがこれらのいずれかのタグを持っている場合にブロックされます。
Source Required TagsThis ability can only be activated if the source actor/component has all of these tagsこのアビリティはソースのアクター/コンポーネントがこれら全てのタグを持っている場合にのみ発動されることができます。
Source Blocked TagsThis ability is blocked if the source actor/component has any of these tagsこのアビリティはソースのアクタ/コンポーネントがこれらのいずれかのタグを持っている場合にブロックされます。
Target Required TagsThis ability can only be activated if the target actor/component has all of these tagsこのアビリティは対象のアクター/コンポーネントがこれら全てのタグを持っている場合にのみ発動されることができます。
Target Blocked TagsThis ability is blocked if the target actor/component has any of these tagsこのアビリティは対象のアクター/コンポーネントがこれらのいずれかのタグを持っている場合にブロックされます。

検証用のプロジェクト

今回作成した検証用のプロジェクトについて解説します。

まず、「Sample.SampleTag1」と「Sample.SampleTag2」、「Sample.SampleTag3」という3つの Gameplay Tag を定義しました。

次に AActor を親クラスとする「BP_SampleActor」というブループリントクラスを作成して、「AbilitySystem」という名前の Ability System Component をアタッチしました。
このアクタは初めからレベルに配置されています。

BP_SampleActor

最後に UGameplayAbility を親クラスとする「GA_Sample」という Gameplay Ability Blueprint を作成しました。
GA_Sample::ActivateAbility() には、「Activated Sample Ability」と表示して End Ability を呼び出すという処理を追加しました。

GA_Sample

ここからは実際の挙動を通じて各タグの意味とその役割を解説していきます。

基本的なタグ

まずは AssetTags と Cancel Abilities with Tag、Block Abilities with Tag という3つの基本的なタグから解説します。
AssetTags はそのアビリティ自体に設定できるタグですが、Cancel Abilities with Tag と Block Abilities with Tag は同じ所有者の持つ他のアビリティに対して影響を与えることができます。

AssetTags (Default AbilityTags)

まずは AssetTags についてです。
これは Gameplay Ability で設定できる最も基本的なタグで、そのアビリティ自体が所有しているタグのことです。

とりあえず、GA_Sample の AssetTags に「Sample.SampleTag1」を設定しました。

GA_Sample

次に、この画像のような処理を BP_SampleActor::BeginPlay() に追加しました。

BP_SampleActor

このブループリントで行っている処理は以下の通りです。

  1. Give Ability で BP_SampleActor::AbilitySystem に GA_Sample を与える。
  2. Make Gameplay Tag Container from Tag の SingleTag 引数に「Sample.SampleTag1」を渡して Gameplay Tag Container を作成する。
  3. Try Activate Abilities by Tag の GameplayTag Container 引数にその Gameplay Tag Container を渡して、タグ経由で間接的に GA_Sample を発動させる。
  4. GA_Sample の発動に成功したら「true」、失敗したら「false」と表示する。

この状態でゲームを実行すると、「Activated Sample Ability」と「true」と表示されました。
BP_SampleActor::AbilitySystem に与えた GA_Sample が正常に発動していることがわかります。

Output Log

当然、Gameplay Tag Container を作成する時に渡すタグを「Sample.SampleTag2」や「Sample.SampleTag3」などの別のタグに変更すると、GA_Sample は発動せずに「false」と表示されます。
GA_Sample の AssetTags を別のタグに変えた場合も同様です。

AssetTags に複数のタグを設定した場合は、Gameplay Tag Container を作成する時にそれらのうちのいずれかのタグを渡してあげると GA_Sample が発動するようになります。

Cancel Abilities with Tag

次は Cancel Abilities with Tag についてです。
アビリティを発動した時に、この Cancel Abilities with Tag に設定されているいずれかのタグを持つ、発動中のアビリティはキャンセルされます。

とりあえず、UGameplayAbility を親クラスとする「GA_Sample2」という Gameplay Ability Blueprint を作成して、「Executing Sample2 Ability」と毎フレーム表示し続けるという処理を ActivateAbility() に追加しました。

GA_Sample2

GA_Sample2 の AssetTags には「Sample.SampleTag2」を設定しました。

GA_Sample2

GA_Sample だけではなく、GA_Sample2 も BP_SampleActor::AbilitySystem に与えて、その GA_Sample2 のみを発動するように BP_SampleActor::BeginPlay() を修正しました。

BP_SampleActor

この状態でゲームを実行すると「Executing Sample2 Ability」と毎フレーム表示され続けます。

そして、GA_Sample の Cancel Abilities with Tag に「Sample.SampleTag2」を設定してみました。

GA_Sample

BP_SampleActor には、Enter キーが押されたら GA_Sample を発動させるという処理を追加しました。

BP_SampleActor

アクタはデフォルトではプレイヤーからの入力を受け取れないので、今回は BP_SampleActor の Auto Receive Input を「Player 0」に変更しています。

BP_SampleActor

この状態でゲームを実行して Enter キーを押してみると、「Activated Sample Ability」と表示されてからは「Executing Sample2 Ability」と表示されなくなりました。

Output Log

Cancel Abilities with Tag がしっかり機能していることがわかります。

試しに GA_Sample の Cancel Abilities with Tag から「Sample.SampleTag2」を外した状態で再度実行してみると、「Activated Sample Ability」と表示された後も「Executing Sample2 Ability」と表示され続けました。

Output Log

先ほどは Cancel Abilities with Tag の効果で GA_Sample2 がキャンセルされたことがわかります。

Block Abilities with Tag

次は Block Abilities with Tag についてです。
アビリティ発動中、この Block Abilities with Tag に設定されているいずれかのタグを持つアビリティは発動できなくなります。

アビリティが発動したら「Activated Sample Ability」と表示して3秒間待機し、その後に「End Sample Ability」と表示して End Ability を呼び出すように GA_Sample::ActivateAbility() を修正しました。

GA_Sample

GA_Sample2::ActivateAbility() は「Activated Sample2 Ability」と表示してすぐに End Ability を呼び出すように修正しました。

GA_Sample2

GA_Sample も GA_Sample2 も AssetTags のみ設定されていて、Cancel Abilities with Tag や Block Abilities with Tag などは空の状態です。

BP_SampleActor::BeginPlay() は、GA_Sample と GA_Sample2 を BP_SampleActor::AbilitySystem に与えた後に GA_Sample を発動するように修正しました。

BP_SampleActor

また、Enter キーが押されたら GA_Sample2 を発動して、その結果を表示するようにも修正しました。

BP_SampleActor

この状態でゲームを実行して GA_Sample の発動中と発動後の計2回、Enter キーを押してみると、どちらも「Activated Sample2 Ability」と「true」と表示されました。

Output Log

GA_Sample の発動中かどうかに関わらず、GA_Sample2 を正常に発動できていることがわかります。

そして、GA_Sample の Block Abilities with Tag に「Sample.SampleTag2」を設定してみました。

GA_Sample

この状態でゲームを実行して再び同じタイミングで2回、Enter キーを押してみると、1回目は「false」とだけ表示されて、2回目は「Activated Sample2 Ability」と「true」と表示されました。

Output Log

GA_Sample の発動中は GA_Sample2 を発動できなくなっているのがわかります。

Activation~ 系のタグ

次は Activation Owned Tags と Activation Required Tags、Activation Blocked Tags という Activation~ 系のタグについて解説します。
Activation Owned Tags はそのアビリティの所有者に持たせることのできるタグのことですが、Activation Required Tags と Activation Blocked Tags はそのアビリティの所有者が保持しているタグに応じて、そのアビリティの挙動を変えることができます。

Activation Owned Tags

次は Activation Owned Tags についてです。
アビリティを発動中、この Activation Owned Tags に設定したタグがそのアビリティの所有者に適用されます。

とりあえず、アビリティが発動したら「Activated Sample Ability」と表示して1秒間待機し、その後に「End Sample Ability」と表示して End Ability を呼び出すように GA_Sample::ActivateAbility() を修正してみました。

GA_Sample

GA_Sample には AssetTags のみ設定してあります。
Activation Owned Tags は空です。

また、GA_Sample を BP_SampleActor::AbilitySystem に与えた後、1秒間待ってから GA_Sample を発動するように BP_SampleActor::BeginPlay() を修正しました。

BP_SampleActor

さらに BP_SampleActor::AbilitySystem が「Sample.SampleTag1」を持っているかどうかを「true」と「false」で毎フレーム表示するという処理を BP_SampleActor::Tick() に追加しました。

BP_SampleActor

今回は Has Matching Gameplay Tag の戻り値を Tick() で毎フレーム確認するという原始的な方法をとっていますが、「showdebug abilitysystem」などのコンソールコマンドで確認する方法もオススメです。

Gameplay Ability System 関連のデバッグ方法については「Gameplay Ability System – Debugging Tools」という公式ドキュメントが参考になるかと思います。

この状態でゲームを実行すると、以下のように GA_Sample の発動前も発動中も発動終了後も「false」と表示され続けました。

≀
LogBlueprintUserMessages: [BP_SampleActor_C_1] false
LogBlueprintUserMessages: [GA_Sample_C_0] Activated Sample Ability
LogBlueprintUserMessages: [BP_SampleActor_C_1] false
≀
LogBlueprintUserMessages: [BP_SampleActor_C_1] false
LogBlueprintUserMessages: [GA_Sample_C_0] End Sample Ability
LogBlueprintUserMessages: [BP_SampleActor_C_1] false
≀

つまり、この状態では BP_SampleActor::AbilitySystem はどのタイミングにおいても「Sample.SampleTag1」を持っていないということがわかります。

そして、GA_Sample の Activation Owned Tags に「Sample.SampleTag1」を設定してみました。

GA_Sample

この状態でゲームを実行すると、以下のように GA_Sample の発動中のみ「true」と表示され、それ以外のタイミングでは「false」と表示されました。

≀
LogBlueprintUserMessages: [BP_SampleActor_C_1] false
LogBlueprintUserMessages: [GA_Sample_C_0] Activated Sample Ability
LogBlueprintUserMessages: [BP_SampleActor_C_1] true
≀
LogBlueprintUserMessages: [BP_SampleActor_C_1] true
LogBlueprintUserMessages: [GA_Sample_C_0] End Sample Ability
LogBlueprintUserMessages: [BP_SampleActor_C_1] false
≀

そのアビリティの発動中、Activation Owned Tags に設定したタグがその Ability System Component に適用されているのがわかります。

今回は GA_Sample の AssetTags も Activation Owned Tags も同じタグにしましたが、別々のタグでも問題ありません。

Activation Required Tags

次は Activation Required Tags についてです。
このアビリティの所有者が、Activation Required Tags に設定されている全てのタグを持っていないとこのアビリティを発動できなくなります。
つまり、Activation Required Tags では、このアビリティを発動するために所有者が保持しておくべきタグを設定することができます。

とりあえず、アビリティが発動したら「Activated Sample Ability」と表示してすぐに End Ability を呼び出すように GA_Sample::ActivateAbility() を修正しました。

GA_Sample

GA_Sample には AssetTags のみ設定してあります。
Activation Required Tags は空です。

また、GA_Sample を BP_SampleActor::AbilitySystem に与えて GA_Sample を発動し、その結果を「true」か「false」で表示するように BP_SampleActor::BeginPlay() を修正しました。

BP_SampleActor

この状態でゲームを実行すると、「Activated Sample Ability」と「true」と表示されて GA_Sample が正常に発動していることがわかります。

Output Log

そして、GA_Sample の Activation Required Tags に「Sample.SampleTag1」を設定してみました。

この状態でゲームを実行すると「false」とだけ表示されて GA_Sample の発動に失敗していることがわかります。

Output Log

GA_Sample の発動には「Sample.SampleTag1」が必要であるにも関わらず、BP_SampleActor が「Sample.SampleTag1」を持っていなかったため、このような結果になりました。

次に BP_SampleActor::BeginPlay() で GA_Sample を発動する前に Add Loose Gameplay Tags というノードを使って BP_SampleActor に「Sample.SampleTag1」を追加してみます。

BP_SampleActor

この状態でゲームを実行すると、「Activated Sample Ability」と「true」と表示されて GA_Sample が正常に発動していることがわかります。

Output Log

このように Activation Required Tags ではそのアビリティの発動に必要なタグ(そのアビリティの所有者が保持しておくべきタグ)を設定することができます。

Activation Required Tags は、アビリティの所有者がこれら『いずれか』のタグを持っている場合にそのアビリティを発動できるのではなく、これら『全て』のタグを持っている場合にそのアビリティを発動できるという点には注意が必要です。

例えば今回の例では GA_Sample の Activation Required Tags に「Sample.SampleTag1」と「Sample.SampleTag2」、「Sample.SampleTag3」という3つのタグを設定したとします。

GA_Sample

この状態で先ほどのように、BP_SampleActor::BeginPlay() で GA_Sample を発動する前に「Sample.SampleTag1」のみを BP_SampleActor に追加すると、「false」とだけ表示されて GA_Sample の発動に失敗してしまいます。

Output Log

この場合、今回の例では BP_SampleActor::BeginPlay() で Make Literal Gameplay Tag Container を使って「Sample.SampleTag1」と「Sample.SampleTag2」、「Sample.SampleTag3」の3つのタグを BP_SampleActor に追加すると GA_Sample を正常に発動できるようになります。

BP_SampleActor::BeginPlay()

Activation Blocked Tags

次は Activation Blocked Tags についてです。
Activation Blocked Tags は先ほどの Activation Required Tags とは逆で、このアビリティの所有者が、Activation Blocked Tags に設定されているいずれかのタグを持っているとこのアビリティを発動できなくなります。

GA_Sample::ActivateAbility() の処理は先ほどと同じままで、GA_Sample の Activation Blocked Tags に「Sample.SampleTag1」を設定してみました。

GA_Sample
GA_Sample

BP_SampleActor::BeginPlay() は GA_Sample を BP_SampleActor::AbilitySystem に与えて GA_Sample を発動し、その結果を「true」か「false」で表示するようにしました。

BP_SampleActor

この状態でゲームを実行すると、「Activated Sample Ability」と「true」と表示されて GA_Sample が正常に発動していることがわかります。

Output Log

しかし、以下のように BP_SampleActor::BeginPlay() で GA_Sample を発動する前に「Sample.SampleTag1」を BP_SampleActor に追加してみると、「false」とだけ表示されて GA_Sample の発動に失敗してしまいます。

BP_SampleActor
Output Log

そのアビリティの所有者が Activation Blocked Tags に設定されている、いずれかのタグを持っていると、そのアビリティを発動できなくなっているのがわかります。

Source~ 系と Target~ 系のタグ

最後は Source Required Tags と Source Blocked Tags という Source~ 系のタグと、Target Required Tags と Target Blocked Tags という Target~ 系のタグについて解説します。
これらのタグはそのアビリティを Gameplay Event 経由で発動させる場合にのみ意味を持つタグです。
(たぶん)

Send Gamaplay Event to Actor や Send Gameplay Event などで Gameplay Event を送信する際、Gameplay Event Data という構造体を作成して Payload 引数に渡すことができます。
Source~ 系のタグは、この Gameplay Event Data を作成する時に設定できる「Instigator Tags」を、Target~ 系のタグは「Target Tags」を参照します。

この画像では Gameplay Event Data の他のメンバ変数を非表示にしています。

Source Required Tags

まずは Source Required Tags についてです。
Gameplay Event 経由でこのアビリティを発動させる際、Source Required Tags に設定されている全てのタグが Instigator Tags に含まれていないと、このアビリティを発動できなくなります。
つまり、Source Required Tags では、Gameplay Event 経由でこのアビリティを発動するために Instigator Tags に設定されておくべきタグを設定することができます。

とりあえず、GA_Sample の Source Required Tags に「Sample.SampleTag2」を設定しました。
今回、GA_Sample は Gameplay Event 経由で発動させるので「Triggers > Ability Triggers」に要素を1つ追加して、Trigger Tag を「Sample.SampleTag1」に、Trigger Source を「On Gameplay Event」に変更しました。

GA_Sample

また、これまでは GA_Sample::ActivateAbility() で「Activated Sample Ability」と表示していましたが、GA_Sample::ActivateAbilityFromEvent() でそれを表示するように修正しました。

GA_Sample

BP_SampleActor::BeginPlay() は GA_Sample を BP_SampleActor::AbilitySystem に与えた後に Send Gamaplay Event to Actor で「Sample.SampleTag1」のイベントを送信するように修正しました。
Gameplay Event Data の Instigator Tags にはまだ何も設定していません。

BP_SampleActor

GA_Sample の Source Required Tags には「Sample.SampleTag2」と設定されているにも関わらず、Gameplay Event Data の Instigator Tags にはそれが設定されていないため、この状態でゲームを実行しても「Activated Sample Ability」と表示されることはありません。

しかし、以下のように BP_SampleActor::BeginPlay() で Gameplay Event を送信する際、Gameplay Event Data の Instigator Tags に「Sample.SampleTag2」を設定すると、「Activated Sample Ability」と表示されて GA_Sample が正常に発動するようになります。

BP_SampleActor
Output Log

この Source Required Tags も Activation Required Tags のときのように、そこに設定した『全て』のタグが Instigator Tags に設定されているときのみ、そのアビリティを発動させることができます。

Source Blocked Tags

次は Source Blocked Tags についてです。
Source Blocked Tags は先ほどの Source Required Tags とは逆で、Gameplay Event 経由でそのアビリティを発動させる際、 Source Required Tags に設定されているいずれかのタグを Instigator Tags が含んでいないと、このアビリティを発動できなくなります。

とりあえず、GA_Sample の Source Blocked Tags に「Sample.SampleTag2」を設定してみました。
「Triggers > Ability Triggers」や GA_Sample::ActivateAbilityFromEvent() の内容は変更していません。

GA_Sample

BP_SampleActor::BeginPlay() では Gameplay Event Data の Instigator Tags に何も設定せずに Send Gamaplay Event to Actor するようにしました。

BP_SampleActor

この状態でゲームを実行すると、「Activated Sample Ability」と表示されて GA_Sample が正常に発動していることがわかります。

Output Log

ところが、 Gameplay Event Data の Instigator Tags に「Sample.SampleTag2」を設定した状態でゲームを実行すると何も表示されず、GA_Sample が発動しませんでした。

BP_SampleActor

Gameplay Event Data の Instigator Tags が、Source Required Tags に設定されているタグを含んでいると GA_Sample を発動できなくなっているのがわかります。

Target Required Tags / Target Blocked Tags

最後は Target Required Tags と Target Blocked Tags についてです。
Source Required Tags と Source Blocked Tags は Gameplay Event Data の Instigator Tags を参照していましたが、Target Required Tags と Target Blocked Tags はそれらの「Target Tags を参照するバージョン」です。
基本的な挙動は Source~ 系のタグと変わりません。
(たぶん)

最後に

参考記事

お問い合わせ

    タイトルとURLをコピーしました