コードの型
衝突した相手の「タグ(目印)」を確認します。
C#
void OnCollisionEnter2D(Collision2D collision)
{
// ぶつかった相手のタグが "Enemy" かどうかを判定
if (collision.gameObject.CompareTag("Enemy"))
{
Debug.Log("敵に当たりました!");
}
}
コードの仕組み
Unityには、オブジェクトに「タグ(Tag)」というラベルを貼る機能があります。CompareTag はそのラベルをチェックする専用の機能です。
- なぜ
==を使わないの?:if (collision.gameObject.tag == "Enemy")と書いても動きますが、これはメモリを無駄に使いやすく、Unityの公式でも推奨されていません。CompareTagを使うことで、内部的に無駄なメモリ確保を防ぎ、処理を高速化できます。 - タグの役割: シーン上に敵が100体いても、全員に「Enemy」というタグを貼っておけば、
CompareTag("Enemy")だけで「全員を敵として扱う」ことができます。
活用例(コイン落としやアクション)
「プレイヤー、敵、コイン、壁」など、役割ごとにタグを分けて、ぶつかった時の処理を分岐させます。
C#
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Coin"))
{
// コインならスコア加算
AddScore(10);
}
else if (collision.gameObject.CompareTag("DeadLine"))
{
// 落ちたらゲームオーバー
GameOver();
}
}
その他(重要ポイント)
- タグの作成: コードを書くだけでは動きません。Unityのエディタ上で、オブジェクトを選択し、インスペクター上部の「Tag」プルダウンから「Add Tag…」を選んで「Enemy」などの名前を作成し、それをオブジェクトに設定(適用)する必要があります。
- スペルミスに注意:
"Enemy"と"enemy"(小文字)は別物として扱われます。タグの名前をそのまま正確に書きましょう。 - 空のタグ: タグを設定し忘れているオブジェクトは、
CompareTagで調べてもすべて「false」になります。
初心者向けまとめ
CompareTag は、「相手の名札をチェックする」という行動です。
- 衝突検知(
OnCollisionEnter2D)は「何かにぶつかった!」という事実を伝える。 CompareTagは「ぶつかった相手は味方か?敵か?コインか?」を名札を見て区別する。

コメント