クラスの継承とタグの扱い
「アクターに付けたタグの扱いについてちょっと勘違いしてて、クラスのデフォルトで設定したタグは、あくまでデフォルトで、配置した後に足したり消したり出来るから、個別に色々やっても大丈夫なことがわかった」
「まず基本クラスにタグAとタグBの2つをつけた状態」
「これがさっきのを継承したクラス(サブクラス)で、タグCを追加した状態」
「サブクラスをレベル上に配置して、タグBを削除した状態」
「そうするとこういう風に、最終的なタグの状態だけが反映される」
妹「これ配置した後にクラスのデフォルトタグを変更したらどうなるのかな?」
「まったくタグを変更してない場合だと、元になるクラスの変更を引き継ぐ。でもタグを追加するか消すかして、ちょっとでも違う状態にしてる場合は元のままになる。このへんはちょっと注意した方がいいかも」
妹「なるほど。ところでタグって何に使うものなのかな? なんというか、コンポーネントの方が凄くない?」
「アクターについてるか、ついてないかの判別には、多分タグを使う方が速いし、メモリ消費も少ない。あとはいちいちアセットとして作らなくてもいいっていうのは利点。欠点は書き間違いに弱いこと。破壊出来るやつに付けたタグは、damageだったかdestructionだったか、どっちだったかなあ……みたいな事がちょくちょくある。よく見たらdamegeになってたりとかね」
妹「ありそうだけど、コンポーネントでも書き間違いはあるんじゃ? っていうか時々間違うんだけど……」
「それは後からコンポーネントの名前変えれば全部直せるから。似たコンポーネントを2つ作っちゃった場合も、2つあるというのがわりと早い段階でわかる」
妹「タグを間違えてる場合はどうやるの?」
「間違えてるとわかった後は検索とかで探せそうだけど、原因がわかるまでが大変。例えば、GetAllActorOfClassとか使って、全部のコンポーネントの全部のタグをPrintStringで書き出す……と見るのが大変だから、使ってるタグリストを配列に入れて、それと違うタグを見つけたらPrintStringの方がいいかな。なんにしてもちょっと厄介」
妹「めんどくさそう」
「あとは、そのタグをどういう風に扱うかっていうのを、結局アクターかコンポーネントのどこかに書かないといけない。コンポーネントだとそれだけでイベントのバインドとか色々出来るし、自前の変数もあるから、物によってはそのまま別プロジェクトで使えるぐらい独立性がある」