Unityで開発を進めている君、オブジェクトのタグ比較で、
if (gameObject.tag == “Enemy”)
なんてコードを書いてないかい?
実は、私もつい最近までこの書き方を使っていたんだ。
でも調べていくうちに、もっと安全で効率的な方法があることに気づいた。それが CompareTag を使うやり方。
この記事では、なぜ CompareTag を使うべきなのか、その理由を分かりやすく紹介するよ。これを知れば、君のコードはひとつレベルアップするはずだ!
tag == “文字列” が抱える、見過ごせない問題点

まずはよくあるコード例を見てみよう。
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Enemy")
{
Debug.Log("敵にヒット!");
}
}一見シンプルで分かりやすいよね。でも、この書き方には2つの注意点があるんだ。
① タイプミスに気づきにくい
もし tag == “Enemi” のように、タグ名をうっかり間違えても、Unityはエラーを出さずに false を返すだけ。
つまり、気づかないまま処理がスルーされてしまうんだ。
② 大量の処理ではパフォーマンスが気になることも
1回だけの比較なら問題ないけど、例えば Update の中で毎フレームたくさんのタグ比較を行っていたら、小さな差が積もってパフォーマンスに影響する場合もある。
1回だけの比較なら大きな違いはないけど、Update()のように毎フレーム実行される処理や、たくさんのオブジェクトを相手にする時には、CompareTag の方が負担を軽くできるよ。
こどじょんC#の「==」は最適化されていてパフォーマンスいいんだけど、UnityでTagを比較する場面では、CompareTagの方が速くなります。
CompareTag(“文字列”) がオススメな理由
じゃあ、どうすればいいのか?答えはシンプル、CompareTag を使えばいい。
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
Debug.Log("敵にヒット!");
}
}これが Unity 公式も推奨する、安全でスマートな方法だよ。
比較が速い
Unityが内部的に最適化してくれているので、== よりもわずかに効率がいい。特に大量の比較を行うような場面では差が出てくる。
タグの存在をチェックしてくれる
もし CompareTag(“Enemi”) のように存在しないタグを使った場合、Unityのコンソールに警告が表示されることがある。
完璧に防げるわけじゃないけど、デバッグの手がかりになりやすいのは助かるよね。
こどじょんもちろん、他にもenumを使う方法や、さらに進んで…。まあしかし、初心者のうちはこの方法でやってみよう。
これからの標準は CompareTag
ポイントを整理しよう。
- tag == “文字列”
- 書きやすいがタイプミスに弱い
- CompareTag(“文字列”)
- 高速で安全、Unity推奨の方法
初心者が入門書にあるようなゲームを作るレベルならパフォーマンスに問題はありませんが、特別な理由がなければ、これからは CompareTag を使おう!
タグ比較の標準スタイルとして覚えておけば、将来のバグも未然に防げるかもしれない。

