プレイヤー側もプレイヤータグを指定しなければいけないのはなぜでしょうか
例え話をします。
神様(=開発者。つまり質問主さん)は思いました。
「アイテムにプレイヤーオブジェクトがぶつかったら、そのアイテムは消滅させよう」
そこでまず、アイテムの性質を決めるクラスItem.cs
を作りました。
以後、アイテムにさせたい働きはここに書き込んでいくことにします。
アイテムに何かのオブジェクトがぶつかった時、このぶつかった相手のオブジェクトを「hit」とします。
コードで書くとこうなります。
void OnTriggerEnter (Collider hit) { }
もしこのhitがプレイヤーオブジェクトなら、アイテムは消滅しなくてはいけません。
もしこのhitがプレイヤーオブジェクトでないなら、アイテムは消滅してはいけません。
このhitがプレイヤーオブジェクトかどうか、どう判断しましょうか?
判断を下す方法の1つが「タグ」です。
神様は**「プレイヤーオブジェクトには"Player"というタグを付ける」**と決めました。
こう決めておけば、hitのタグが"Player"なら、hitはプレイヤーオブジェクトであると言えるでしょう。
こうして「hitのタグが"Player"であるならば」という条件分岐を用いて判断を下せるようになりました。
if (hit.CompareTag ("Player")) { }
さて、ここで1つの疑問が生まれることでしょう。
「もしプレイヤーではないオブジェクトに"Player"タグが付いていて、アイテムにぶつかったらどうなるんだ?」
今回のスクリプトだと、アイテムは消滅します。
アイテムが有している判断材料は「hitのタグが"Player"かどうか」だけだからです。
見ているのは相手のタグだけで「hitが実際はどんなオブジェクトなのか」は知るところではありません。
だからぶつかった相手のタグが"Player"だったら、それがプレイヤーオブジェクトだろうがアイテムオブジェクトだろうが消滅します。
そうならないように、神様は責任を持って、プレイヤーオブジェクトにはPlayerタグを付け、そうでないオブジェクトにはPlayerタグを付けないようにしなければいけないのです。
(よってアイテムオブジェクトにPlayerタグを付けるのは本来間違いです。アイテムオブジェクト同士が絶対にぶつからないならば影響はありませんが)
もちろん判断を下す方法はタグ以外にもあります(オブジェクトの名前で判断する、付いているコンポーネントで判断するなど)が、それはまた別のお話。