リリースされたばかりのUE4.15から正式にGameplay Tagがフルサポートされました。
Gameplay Tagとはその名前の通り汎用的なゲームプレイコンテンツを作る際に利用できるラベル情報です。通常のタグと比較すると以下のような機能を持ちます。
1. 中央タグデータベース辞書に登録して使う
2. 専用のUIが用意されており、インエディター内のどこでも利用可能
3. タグが階層情報を持っている
4. 外部データからデータテーブルを介してタグ情報のインポートが可能
5. タグ自体が参照情報を持っている
6. 保存されたタグはiniファイルやhファイルに存在する
これらの機能を利用するための関数やノードが始めから用意されています。デフォルトの状態ではタグの追加ができないので、まずはプロジェクト設定で設定を行う必要があります。
プロジェクト設定から"GameplayTags"カテゴリーを開いて、"Import Tags from config"にチェックをつけてください。これで始めてGameplay Tagが利用可能になります。ではここから具体的な使い方を解説していきます。
タグを追加する
早速タグを追加してみましょう。先ほどの設定を終えていれば、"Add New Gameplay Tag"ボタンを押すと、"Add New Tag"というボタンが出現しています。まずは"Name:"を入力しましょう。後々のために"Comment"を入力しておいても構いません。
入力を終えたら、Enterキーを押すか、"Add New Tag"を押すと"Gameplay Tag List"上にタグが追加されます。
タグが追加されました。ここから更に追加したタグを選択した状態で、"+"ボタンを押すとサブタグという子タグを追加することができます。
"Name"に自動的に親タグが追加されているので、子タグの名前を入力し、親と同様の方法でタグを追加すると、リストに親タグの子タグとして追加されます。
もちろん子タグの更に子タグを追加することもできます。同様の方法を使って、タグを追加していくと以下のように増やすことが可能です。
これでタグが追加できました。次は具体的な使い方を解説していきます。
Gameplay Tagの変数を作成
ブループリントで変数を作成します。作成可能なGameplayTagには二種類あり、"Gameplay Tag"型と"Gameplay Tag Container"の二種類です。それぞれの違いを解説すると…
1. "Gameplay Tag"は単体のタグのみを持つ
2. "Gameplay Tag Container"は複数のタグを同時に持てる
3. "Gameplay Tag Container"は配列ではない
4. "Gameplay Tag Container"にはタグを後から追加できる
といったところで、大きな違いはありませんが、"Gameplay Tag Container"は"Gameplay Tag"としても利用できるので、"Gameplay Tag Container"のみでも大丈夫です。
実際に変数を作成し、一度コンパイルボタンでコンパイルすると、デフォルト値が編集できるようになります。"Edit"ボタンを押して編集しましょう。
ここから変数に必要なタグを追加します。チェックボックスになっているので、チェックをつけるとデフォルト値が変化します。
これで無事タグが追加できました。"Gameplay Tag"ではひとつしかチェックができませんが、"Gameplay Tag Container"では同時に複数のチェックが可能なので必要に応じて使いわけてください。
Gameplay Tagをマッチングさせる
Gameplay Tagは様々な方法でマッチングが可能です。最も基本の方法は"Matches Tag"ノードを使います。この時にタグをノードから直接"Edit"することで指定ができます。
"Exact Match"オプションは厳密にマッチチェックを行うかのオプションです。例えば、"Player"というタグがあった場合、その子タグには"Skill"というタグがあり、マッチ条件を"Player.Skill"とします。
"Exact Match"オプションがない場合は"Player"というタグでマッチチェックをすると"Player.Skill"でもマッチングしますが、"Exact Match"オプションがあるとマッチングしません。複合的な条件が欲しければオプションをつける必要はありません。
"Gameplay Tag Container"を利用すると更に高度なマッチングが可能です。よく使うと思われるのが、"Has Tag"ノードと"Matches Any Tags"ノードです。
"Has Tag"ノードは親と子タグを含めてそのタグを持っていないとマッチングしません。それに対して"Matches Any Tags"ノードでは親と子タグを含めて子タグを持っていない場合でもマッチングします。
少しややこしい例となりますが、実際に使うとこんな具合になります。"Exact Match"オプションで更にややこしくなりそうですが、今回はそこまで検証していません。適時使いわけが必要になりそうです。
更に"Has Any Tags"や"Has All Tags"といったノードを使うとタグコンテナ同士の比較が可能です。
いずれかのタグがマッチングすると、trueになる"Has Any Tags"ノードや全てのタグが一致しないといけない"Has All Tags"ノードなどこちらも便利に使いわけることが可能です。
便利なノードたち
"Gameplay Tag Container"は追加も可能です。
"Add Gameplay Tag"はタグコンテナな単体のタグを追加します。"Append Gameplay Tag Containers"はタグコンテナの後ろにタグコンテナを追加します。
Switch Caseノードを"Gameplay Tag"で利用するとよりわかりやすく利用可能です。
Switch Caseノードは詳細から自由に編集が可能なので、Add Pinを行ってから自由に編集するとわかりやすくなります。
ただし、Caseに名前が表示されるのは"Gameplay Tag"型のみで、"Gameplay Tag Container"型は複数のタグを同時に持つため、Case名に表示されないことに注意してください。
おまけ Gameplay Tag Query
更に高度な検索として、"Gameplay Tag Query"という変数を作成するとタグクエリーが利用可能です。この変数を作成して"Edit"を行うと専用のUIが出現し、複合条件を指定することが可能です。
こちらはかなり高度な検索となるので、そこまで必要とされることはなさそうですが、複雑な状況下ではあると使えるのかもしれません。使う時は"Gameplay Tag Container"と同時に指定します。
これでタグクエリー検索までできました。Gameplay Tagは以前から存在していた機能のひとつですが、4.15でようやく一先ず完成したという感じです。Epic GamesのParagonといったゲームにはこれらの機能が頻繁に使われているそうです。
規模が大きいゲームほど重宝しそうなのでぜひ活用してみましょう。