はじめに
enumは便利だけど255までしか定義できないし、型の縛りがあるから使いづらいな~
FNameは自由度高いけど入力ミスが心配だなー
なんて方におすすめなのがGamePlayTagです!
何を今更、という感じですが昔からUEを使ってる方とかは存在を知らないかもしれないので紹介しちゃいます。
自分は知りませんでしたw
GamePlayTagとは
- 文字列のリストを作っておき、使う時にそのリストから選択することができるタグです。
- タグは階層構造をもたせることができます
状態異常などのステート、アクターの検索、アニメーションのIdなどいろんなものに使えます。
ネットワークで通信する場合のコストは?
デフォルトだと文字列で送られてしまうのでここにチェックを入れましょう。
こうするとindexで送ってくれるようになります。ただしサーバーとクライアントでタグのリストが同じでないとずれてしまうのでバージョンを合わせる等注意が必要です。
詳細はこちら
C++から使う場合のおすすめのやり方
C++の場合は文字列でTagを取得します。"Animation.Idle"としても良いのですがTagをリファクタリングする時に大変なのと
インテリセンスで選べたほうが間違いないのでこのように定義しておくと良いでしょう。
UE_DEFINE_GAMEPLAY_TAG_STATIC(Tag_ABC, TEXT("A.B.C"));
UE_DEFINE_GAMEPLAY_TAG_STATIC(Tag_AnimationIdle, TEXT("Animation.Idle"));
UE_DEFINE_GAMEPLAY_TAG_STATIC(Tag_AnimationRun, TEXT("Animation.Run"));
UE_DEFINE_GAMEPLAY_TAG_STATIC(Tag_StatePoison, TEXT("State.Poison"));
UE_DEFINE_GAMEPLAY_TAG_STATIC(Tag_StateSleep, TEXT("State.Sleep"));
高度なゲームプレイタグって?
編集できるユーザーを制限できるようです。
おすすめGamePlayTagの紹介ページ
すばらしい記事がたくさんあるので自分が説明するよりこちらのサイトを見たほうが良いです。
GamePlayTagについてなんと19回にも分けてとても詳しく紹介されています。
ここを読めばほぼ全て分かります。おすすめ。
リストが巨大化して検索が大変になってくると欲しくなるフィルタリングのやり方について紹介されています。
以上