Gameplay Tag は、概念的で階層的なラベルとして機能するユーザー定義の文字列です。Gameplay Tag をプロジェクト内のオブジェクトに適用し、ブール値またはフラグのチェックと同様に、これらを評価してゲームプレイ実装を制御できます。
これらを使用して、以下のようなさまざまな概念を伝えることができます。
Character.Enemy.Zombie
などのオブジェクトの属性Movement.Mode.Swimming
など、オブジェクトが実行することまたは実行できることGameplayEvent.RequestReset
などのゲーム イベントおよびトリガー
Gameplay Tag には、.
文字で区切られる、任意の数の階層レベルがあります。たとえば、タグ Event.Movement.Dash
はレベルが 3 つあり、Event
が階層の最も広範な識別子で、Dash
が最も具体的な識別子になります。
Gameplay Tag を定義する
Unreal Engine に認識させるために、Gameplay Tag をタグ辞書に追加する必要があります。次のいずれかの方法で、タグを追加 (または削除)できます。
- [Project Settings (プロジェクト設定)] で直接でタグを追加または削除する
- データ テーブル アセットからタグをインポートする
- C++ でタグを定義する
上記の方法のすべての項目は、[Project Settings] にある [Project (プロジェクト)] ヘッダの [Gameplay Tag] セクションで設定されます。
[Project Settings] でタグを追加する
新しい Gameplay Tag を定義する最も簡単な方法は、[Project Settings] で直接追加することです。
[Project Settings] でタグを追加するには、以下の手順に従います。
- [Import Tags from Config (コンフィグからタグをインポート)] を有効にします。これにより、「
Config/DefaultGameplayTags.ini
」などの.ini
ファイルおよび「Config/Tags
」にあるすべての .ini ファイルからすべての Gameplay Tag がインポートされます。 - (オプション) [Add new Gameplay Tag source (新しいゲームプレイ タグ ソースを追加)] ボタンをクリックして、「
Config/Tags
」にある新しいソース.ini
ファイルを作成して Gameplay Tag を格納します。プロジェクトのさまざまな側面のために別々のソース ファイルを作成すると、大規模なプロジェクトの組織やコラボレーションに便利です。 - [Gameplay Tag List (ゲームプレイ タグ リスト)] エントリの横にある [Manage Gameplay Tags (ゲームプレイタグを管理)] ボタンをクリックします。これにより、[Gameplay Tag Manager (ゲームプレイ タグ マネージャー)] ウィンドウが開きます。
- [Gameplay Tag Manager] ウィンドウで、左上隅にある [+Add (+追加)] ボタンをクリックします。
- 必要な [Name (名前)]、[Comment (コメント)]、および [Source (ソース)] を入力します。コメントはタグのツールチップに表示され、ソースはタグを格納する
.ini
ファイルです。 - [Add New Tag (新しいタグの追加)] ボタンをクリックします。
新しいサブタグの名前変更、削除、複製または追加を行うには、リストで右クリックしてコンテキスト メニューからオプションを選択します。.ini
ファイル以外のソースのタグは、[Gameplay Tag Manager] ウィンドウで名前変更または削除することはできません。
タグの .ini
ソース ファイルはテキスト エディタで編集できますが、エディタを再起動して変更をロードする必要があります。
データ テーブル アセットからタグをインポートする
行タイプがGameplayTagTableRow
の データ テーブル アセットから Gameplay Tag をインポートできます。このアプローチを使用すると、次のことを行うことができます。
- データ テーブル エディタ でタグを管理する。
- エディタ実行中にデータ テーブルを変更する。
.csv
または.json
ファイルをデータ テーブルとしてインポートしてタグを追加する。
データ テーブルからタグをインポートするには、[Project Settings] で以下の手順を実行します。
- [Gameplay Tag Table List (ゲームプレイ タグ テーブル リスト)] の横にある [+Add Element (+要素を追加)] ボタンをクリックします。
- 新しいインデックスのドロップダウンをクリックして、データ テーブルを選択します。
C++ でタグを定義する
Gameplay Tag を C++ で定義するには、NativeGameplayTags.h
で定義される次のマクロを使用します。
UE_DECLARE_GAMEPLAY_TAG_EXTERN
:.h
ファイルで使用され、.cpp
ファイルで定義されるタグを宣言します。UE_DEFINE_GAMEPLAY_TAG
:.cpp
ファイルで使用され、ツールチップのコメントがない、.h
ファイルで宣言されるタグを定義します。UE_DEFINE_GAMEPLAY_TAG_COMMENT
:.cpp
ファイルで使用され、ツールチップのコメントがある、.h
ファイルで宣言されるタグを定義します。UE_DEFINE_GAMEPLAY_TAG_STATIC
:.cpp
ファイルで使用され、定義ファイルにのみ使用可能なタグを定義します。他のDEFINE
マクロとは異なり、これはDECLARE
マクロの呼び出しとペアにしないでください。
GameplayTags
モジュールをプロジェクトの Build.cs
ファイルに追加して Gameplay Tag 機能を C++ でアクセスする必要があります。
実装例
// .h ファイル内
UE_DECLARE_GAMEPLAY_TAG_EXTERN(Movement_Mode_Walking);
// .cpp ファイル内
UE_DEFINE_GAMEPLAY_TAG_COMMENT(Movement_Mode_Walking, "Movement.Mode.Walking", "Default Character movement tag");
実装例の詳細については、Lyra サンプル ゲーム プロジェクトの LyraGameplayTags.h
および LyraGameplayTags.cpp
を参照してください。
定義済み Gameplay Tag を使用する
定義したら、タグをオブジェクトに適用し、タグを評価してプロジェクト内のゲームプレイを制御できます。
タグをオブジェクトに適用する
タグをオブジェクトに適用するには、次のように実行します。
- ゲームプレイ タグ コンテナ (
FGameplayTagContainer
) 型変数をオブジェクトに追加します。この変数には複数の Gameplay Tag が格納されています。 - Add Gameplay Tag (
AddTag
) 関数を使用して、指定したタグをコンテナに追加します。
Remove Gameplay Tag (RemoveTag
) 関数でコンテナからタグを削除したり、Append Gameplay Tag Container (AppendTags
) 関数を使用して、Gameplay Tag Container を一緒に追加したりすることもできます。
Gameplay Tag (FGameplayTag
) 型変数を直接使用できますが、オブジェクトに複数のタグが含まれていることが頻繁にあるので、Gameplay Tag Container が必要になることがよくあります。
タグを条件付き関数で評価する
オブジェクトのタグに基づいて、ゲームプレイ実装を制御できます。オブジェクトの Gameplay Tag Container に格納されているタグを評価するには、以下のような条件付き関数を使用します。
詳細については、「FGameplayTagContainer
」の C++ API リファレンスおよび「GameplayTags」の Blueprint API リファレンスを参照してください。
条件付き関数を空の Gameplay Tag Container で入力パラメータとして呼び出すと、HasAll
など All
関数の場合を除いて、false が返されます。これは、コンテナの内のタグがソース セットから欠けているためです。
Gameplay Tag のクエリ
Gameplay Tag Query (FGameplayTagQuery
) 型変数は条件付き関数を組み合わせて、より簡単で凝縮された方法で複雑なロジックを設定します。
Gameplay Tag のクエリは以下の式をサポートしています。
- Any Tags Match:クエリの少なくとも 1 つのタグがコンテナにあるかどうかをテストします。
- All Tags Match:クエリ内のすべてのタグがコンテナにあるかどうかをテストします。クエリが空の場合、true を返します。
- No Tags Match:クエリ内のタグがコンテナ内にないことをテストします。クエリが空の場合、true を返します。
または、Gameplay Tag のクエリは、部分式に基づいて評価されている以下のルート式をサポートしています。
- Any Expressions Match:部分式のいずれかが true を返すかどうかをテストします。
- All Expressions Match:部分式のすべてが true を返すかどうかをテストします。部分式がない場合、true を返します。
- No Expressions Match:部分式のどれも true を返さないことをテストします。部分式がない場合、true を返します。
高度なトピック
タグ設定の編集制限
Gameplay Tag 編集を (任意の階層レベルで) ユーザー別に制限できます。
編集を制限するには、[Project Settings] で [Advanced Gameplay Tags (高度なゲームプレイ タグ)] > [Advanced (詳細設定)] で以下の設定を行います。
- Restricted Config Files (制限されたコンフィグ ファイル):編集権限のある オーナー のリストとペアになる、制限されたタグを格納するために使用される
.ini
ファイルのリスト。 - Restricted Tag List (制限されたタグ リスト):制限されたタグを変更できる [Gameplay Tag Manager] ウィンドウを表示します。
ユーザー (リストにあるオーナー以外) が制限されたタグを編集しようとすると、警告メッセージが表示され、編集を行うためのオーナーからの許可があることを確認するように、ユーザーに求めます。確認されない場合、編集は行われません。
制限されたタグは作成されると、エディタでは削除できません。制限されたタグを削除するには、.ini
ファイルを直接編集する必要があります。
C++ でタグ アクセスを効率化する
Gameplay Tag 実装を改善するには、IGameplayTagAssetInterface
を使用します。このインターフェースには、以下のメリットがあります。
- 明示的にオブジェクトをキャストせずに、オブジェクトのタグを取得できます。
- カスタム コードを可能な型ごとに記述できます。
インターフェースを実装し、GetOwnedGameplayTags
関数をオーバーライドすると、ブループリントでアクセスできるメソッドを作成して、そのオブジェクトに関連するタグを Gameplay Tag Container に入れられるようになります。ほとんどの場合、これは単に基底クラスから新規コンテナにタグをコピーすることを意味しますが、実装すると、複数のコンテナからタグを集めたり、ブループリントの関数を呼び出してブループリントで宣言したタグやオブジェクトが必要とするものにアクセスしたりできるようになります。
実装例の詳細については、Lyra サンプル ゲーム プロジェクトの ALyraTaggedActor
クラスを参照してください。