【Unity/C#】CompareTag(タグ比較)の基本と書き方

Unityコード専用検索

コードの型

衝突した相手の「タグ(目印)」を確認します。

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 は「ぶつかった相手は味方か?敵か?コインか?」を名札を見て区別する。

コメント

タイトルとURLをコピーしました