はじめに
Gameplay Tag を定義するには主に以下の3つの方法があります。
- プロジェクト設定から追加する
- データテーブルから追加する
- C++ で宣言/定義する
この記事ではこれら3つの方法について軽くまとめてみました。
この記事での環境は以下の通りです。
- Windows 11
- UE 5.7.0(ランチャー版)
プロジェクト設定から追加する
まずはプロジェクト設定から追加するという方法です。
タグを追加する最もシンプルな方法はこれかと思います。
「Edit > Project Settings… > Project > GameplayTags > Gameplay Tags > Gameplay Tag List」の「Manage Gameplay Tags…」というボタンを押します。

「Gameplay Tag Manager」というウィンドウが立ち上がるので左上の「+」ボタンを押します。
タグの名前とコメント、ソースを設定して右下の「Add New Tag」を押します。

Gameplay Tag の他の設定を何も編集していない状態だと Source は「Default」(DefaultGameplayTags.ini)のみ選択できます。
これを選択してタグを追加すると「{プロジェクトのルートディレクトリ}/Config」に DefaultGameplayTags.ini というファイルが作成されます。
このファイルの中を覗いてみると以下のように書かれており、一番下で「GameplayTagList」にそのタグが追加されていることがわかります。
[/Script/GameplayTags.GameplayTagsSettings]
ImportTagsFromConfig=True
WarnOnInvalidTags=True
ClearInvalidTags=False
AllowEditorTagUnloading=True
AllowGameTagUnloading=False
FastReplication=False
bDynamicReplication=False
InvalidTagCharacters="\"\',"
NumBitsForContainerSize=6
NetIndexFirstBitSegment=16
+GameplayTagList=(Tag="GameplayTagManager.SampleTag",DevComment="Hello World")
Gameplay Tag Source
また、タグを追加するソース(ini ファイル)をプロジェクト設定から追加することもできます。
「Edit > Project Settings… > Project > GameplayTags > Gameplay Tags > New Tag Source」の「+ Add new Gameplay Tag source…」を押します。

「Add new Gameplay Tag Source」というウィンドウが立ち上がるのでソースの名前とパスを設定して「Add New Source」を押します。
Config Path はデフォルトの状態では「Default」(Config/Tags)のみ選択できます。

この状態で再び Gameplay Tag Manager を開き、タグを追加しようとするとそのソースを選択できるようになっています。

そのソースを選択してタグを追加すると「{プロジェクトのルートディレクトリ}/Config/Tags」にそのソース名の ini ファイルが作成されます。
その ini ファイルの中は以下のように書かれています。
[/Script/GameplayTags.GameplayTagsList]
GameplayTagList=(Tag="SampleGameplayTagSource.SampleTag",DevComment="")
データテーブルから追加する
次はデータテーブルから追加するという方法です。
こちらも方法はとてもシンプルです。
まずはコンテンツブラウザで右クリックして「Miscellaneous > Data Table」を選択します。

行のベースとなる構造体を選択するウィンドウが開くので「GameplayTagTableRow」を選択して「OK」を押します。

「+ Add」で行を追加してタグの名前とコメントを設定し、保存します。

「Edit > Project Settings… > Project > GameplayTags > Gameplay Tags > Gameplay Tag Table List」の右の「+」ボタンを押して要素を追加します。
追加した要素に先ほどのデータテーブルをアサインします。

この状態で Gameplay Tag Manager を開くと、データテーブルで追加したタグがしっかり反映されていることがわかります。

C++ で宣言/定義する
最後は C++ でタグを定義するという方法です。
まずは以下のように、{プロジェクト名}.Build.cs に「GameplayTags」を追加します。
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class Sample : ModuleRules
{
public Sample(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[]
{
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EnhancedInput",
"GameplayTags" //追加
});
PrivateDependencyModuleNames.AddRange(new string[]
{
});
}
}
次に「○○GameplayTags.h」と「○○GameplayTags.cpp」というファイルを作成します。
恐らく「○○GameplayTags」という名前を付けるのが一般的なような気がします。
(今回は「SampleGameplayTags.h」と「SampleGameplayTags.cpp」というファイル名にしました。)
各ファイルに以下のように書きます。
「SAMPLE_API」は「{プロジェクト名}_API」です。
Gameplay Tag Manager やデータテーブルでタグの名前を設定するときはドット(.)で区切っていましたが、ヘッダーファイルで UE_DECLARE_GAMEPLAY_TAG_EXTERN() を使用するときはアンダーバー(_)で区切ります。
#pragma once
#include "NativeGameplayTags.h"
namespace SampleGameplayTags
{
SAMPLE_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(CppTags_SampleTag);
}
#include "SampleGameplayTags.h"
namespace SampleGameplayTags
{
UE_DEFINE_GAMEPLAY_TAG(CppTags_SampleTag, "CppTags.SampleTag");
}
この状態でコンパイルして Gameplay Tag Manager を開くと、C++ で定義したタグがしっかり反映されているのがわかります。

また、以下のようにソースファイルで UE_DEFINE_GAMEPLAY_TAG_COMMENT() を使用すると、第三引数でそのタグのコメントを設定することができます。
#include "SampleGameplayTags.h"
namespace SampleGameplayTags
{
UE_DEFINE_GAMEPLAY_TAG_COMMENT(CppTags_SampleTag, "CppTags.SampleTag", "Hello World");
}

また、UE_DEFINE_GAMEPLAY_TAG_STATIC() というマクロを使用すると、そのソースファイルでのみ使用可能なタグを定義することができます。
公式ドキュメントにも記載されていますが、UE_DEFINE_GAMEPLAY_TAG_STATIC() は他のマクロと違って UE_DECLARE_GAMEPLAY_TAG_EXTERN() とは併用しません。
#include "SampleGameplayTags.h"
namespace SampleGameplayTags
{
//ヘッダーファイルでは UE_DECLARE_GAMEPLAY_TAG_EXTERN() を使用しない
UE_DEFINE_GAMEPLAY_TAG_STATIC(CppTags_SampleTag, "CppTags.SampleTag");
}



