8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

#初めに
アクターとコンポーネントにはTagsというプロパティがあります。
FName型の配列になっていて、自由に文字列を追加できます。
が、特に直接なにか動作が変わるものではありません。
また、GameplayTagsとは全く関係はありません。

image.png

#何に使うの?

ComponentやActorの識別に利用できます!
キャストや名前の比較などでも同等のことができる場合もありますが、こちらはAActorやUActorComponentなどの基底クラスに実装されているため
キャストほど高価ではありませんし、FName(ランタイムでは整数比較)での処理となり、
クラスなどの「型」を必要としないためアセット間のリファレンスが追加されないというメリットがあります。

たとえばアクターに以下のようなStaticMeshComponentを4つ追加した場合、それぞれを識別するのはなかなか面倒ですがActorTagをつけることでそれが容易になります。

image.png

#利用例
ブループリントの中で使ってみましょう!
以下の例はGetComponentsByTagを使って、Boxというタグを持っているPrimitiveComponentの表示/非表示を切り替えています。

image.png

次の例ではPrimitiveComponent配列に対して、ループを回しながらComponentHasTag関数を使って識別を行っています。(対象のコンポーネントが一つしかないことを前提としています)

image.png

※このようなExecutionピンを持たないGetComponentsByTagのようなPureノードを直接ForLoopなどのマクロに刺すと大きな負荷を生み出すことが多いので、
テンポラリ変数に保存するなどの対策をご利用ください。

他にはコリジョンイベントなどで、一部のアクターにだけ反応したい場合にこのタグを使って(Castなどを回避しながら)識別したりすることが可能です。

Typoなどの危険性はあるので、間違いがあると困る部分はc++側のコードで定数としてFNameを扱う方がいいかもしれません。

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?