BLOGブログ

2020.09.24UE4/C++

[UE4]GameplayTagをフィルタリングして検索効率アップ

執筆バージョン: Unreal Engine 4.25

みなさんはGameplayTag(※1)は使用してますでしょうか?

以前のブログでもご紹介しました「GameplayAbilitySystem」(※2)でも大活躍のGameplayTag!

もちろん私が参加する開発中プロジェクトでも大活躍!は、してるのですが

あっちでGameplayTag!こっちもGameplayTag!と続け、いざGameplayTagを設定するかと編集しようとしたら

ずらーっと大量のGameplayTagが…もちろん検索も可能なので名前がわかっていれば絞り込みも可能ですが

設定するものがある程度決まっているなら項目は少ないほうがラクなのは確かです。

今回はC++を使用して予めGameplayTagのフィルタリングをし、必要なものだけ表示できるようにするための機能を紹介します。

メタ情報を追加

では早速コードを…

変数、関数にそれぞれ

  • 変数には メタ情報に「Categories = タグ名」を追加する
  • 関数にはメタ情報に「GameplayTagFilter = タグ名」を追加する

をすることで該当するGameplayTagのみが表示されるようになります。

次では実際にサンプルプロジェクトでGameplayTagのフィルタリングをしてみました

サンプルプロジェクトのタグ構成

サンプルプロジェクトのタグには

  • hogeTag.testA
  • hogeTag.testB
  • hogeTag.testC
  • hugaTag.testD

がありそれぞれの子どもに「gameplayTag1 ~ 10」を追加しました。

hugaTagでのフィルタリング

「hogeTag」「hugaTag」がルートに存在しこれの「hugaTag」を指定するようにすることで ↓ のように

変数

関数

「hugaTag」と指定されたGameplayTagのみが表示されるようになりました。また、予め絞り込みができるだけでなく「hogeTag」と入力しても候補には表示されず指定することができなくなります。

これにより設定時のヒューマンエラーなども未然に防ぐことが可能になりますね。

階層指定も可能

この指定方法はGameplayTagの階層指定も対応しています。今度は「hogeTag.testA」と指定してみました。

変数

関数

のように指定した「hogeTag.testA」以下のGameplayTagのみ表示されるようになります。

「hogeTag」が表示されてませんがもちろん指定すれば親のタグ名もある状態で設定されます。

BPで追加したGameplayTag、GameplayTagContainer

残念ながらBP上で追加した変数や関数のGameplayTag、GameplayTagContainerではフィルタリングする方法はなさそうでした。

頑張って検索検索!

まとめ

今回の機能を使わなくとも特にGameplayTagを使用する分には何も問題ありません。

が、覚えておくといつか役に立つ日があるかもしれません。

少しでも皆様の開発に役立てばと思います。

ここまで読んでいただきありがとうございました。

※1:GameplayTagについての参考記事

https://docs.unrealengine.com/ja/Gameplay/Tags/index.html

https://www.unrealengine.com/ja/tech-blog/using-gameplay-tags-to-label-and-organize-your-content-in-ue4?sessionInvalidated=true

https://qiita.com/advent-calendar/2019/ue4-gameplaytag

※2:ブログについて

[UE4]GameplayAbilitySystemでコンボ攻撃を作る