【Unity】タグの使い方を知ってオブジェクトを管理しよう!

Unityのタグの使い方 Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「Unityでタグの使い方が分からない。」

「どんなときにタグを使ったらいいの?」

というお悩みの方に向けた内容となっています。

Unityでは、オブジェクトごとにタグという機能を使って、管理していくことができます。

タグとは、そのオブジェクトがどういうオブジェクトなのかを判別するための機能で、タグ単位で処理を制御していくということができます。

例えば、

  • 衝突したオブジェクトが敵かどうか
  • キャラクターは地面にいるかどうか

といった情報を取得したい時に、タグでオブジェクトを管理しておくことで、それぞれの判定処理を効率よく行うことができます。

そこで、このページでは、Unityのタグ機能について、どんな機能なのか、使い方を紹介していきます。

なお、このページでは、

Windows11
Unity Hub3.11.1
Unity6

のバージョンで解説しています。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

タグ機能とは?

まずは、Unityで使えるタグ機能についてまとめていきます。

オブジェクトを判別してもらうための機能

タグ機能とは、冒頭でも解説した通り、Unityで配置したオブジェクトがどういったオブジェクトなのか、判別するために設定することができる機能です。

例えば、敵のオブジェクトとして、敵A、敵B、敵Cと3種類のオブジェクトを配置していたとします。

ただ、このままだと、Unity側ではただのオブジェクトとしか認識されません。

そこで、「Enemy」というタグを作って、それぞれのオブジェクトに設定してあげることで、そのオブジェクトが敵のオブジェクトであるということを判別させることができます。

これが、Unityで使えるタグの機能です。

当たり判定の際にタグで制御できる

このタグ機能は、オブジェクト同士での衝突判定による相手のオブジェクトの特定の際に、タグで制御できるので非常に役立ちます。

例えば、プレイヤーに敵が触れたらダメージを受けるという処理を作りたいとして、敵含めて様々なオブジェクトがプレイヤーに当たる場合、どのオブジェクトが敵なのかを判別していかないといけません。

そこで、タグに「Enemy」と入っているオブジェクトと当たった時だけ、ダメージを受けるという処理を行うことで、簡単に制御することができます。

他にも、何度もジャンプができないように、地面に「Ground」というタグを付けて、このタグに触れているときだけジャンプできるようにする、といった地面との接地判定としてもよく使われます。

このように、タグ機能を使うことで、そのオブジェクトを判別して制御することが簡単にできるようになります。

タグの使い方

ここからは、タグの使い方についてまとめていきます。

タグの設定方法

タグの設定は、基本的にインスペクターウィンドウから行うことになりますが、スクリプトからも設定や変更を行うこともできます。

ここでは、どちらの方法についても紹介していきます。

インスペクターウィンドウから設定する

インスペクターウィンドウからタグを設定する場合は、オブジェクトを選択してインスペクターウィンドウの「Tag」から設定していきます。

デフォルトでは「Untagged」に設定されています。

Unity側で、始めからいくつかタグが作成済みなのでそこから選ぶか、新しくタグを作成する場合は「Add Tag…」を選択します。

すると、タグを管理する画面に移るので、Tagsの部分の「+」ボタンを押してタグ名を入力、「Save」をクリックすると、新たにタグが作成できます。

ここでは「Enemy」というタグを作成しました。

もう一度、オブジェクトを選択してインスペクターウィンドウに戻りTagの部分を開くと、先ほど作成したタグが出来ているので、そのタグを選択します。

これで、タグの設定が完了しました。

スクリプトから設定する

スクリプトから設定する場合は、そのオブジェクトにアタッチしたスクリプトであれば、以下のように書いてあげることで、そのオブジェクトにタグを設定することができます。

gameObject.tag = "タグ名";

なお設定するタグは、先ほどのインスペクターウィンドウ上で作成しておきましょう。

スクリプトでタグを変更することで、ゲーム内での途中で処理を変更させる、といったことができるようになります。

タグ名をスクリプトで取得

タグ名をスクリプトで取得する場合は、以下のように書いてあげることで、そのオブジェクトのタグ名を取得することができます。

gameObject.tag

このタグ名の取得によって、様々な処理を制御することができるようになります。

例えば、オブジェクトとの当たり判定の中で、そのオブジェクトに「Enemy」のタグが付いているときだけ処理を行いたい場合は、

using UnityEngine;

public class Test : MonoBehaviour
{
    void OnTriggerEnter2D(Collider2D collision) // collisionで相手のコライダーを取得
    {
        if (collision.gameObject.tag == "Enemy")    // 相手のオブジェクトのタグ名がEnemyの場合
        {
            Debug.Log("ダメージを与える");  // ダメージを与える処理を書く
        }
    }
}

のように、7行目でif文を使ってタグ名で制御してあげることで、敵オブジェクトと当たった時だけの処理を書いていくことができます。

まとめ

このページでは、Unityで使えるタグの機能について、どんな仕組みなのか、使い方などを紹介していきましたが、いかがでしたでしょうか?

タグ機能は、どんなオブジェクトかを判別するための機能で、そのタグに合わせて処理を行うことができます。

タグの設定は、インスペクターウィンドウで設定するか、スクリプトを使って変更することができます。

当たり判定の際に、特定のオブジェクトと当たった時だけ処理を行いたいとする際、タグ機能は非常に便利に使うことができます。

最後までお読みいただきまして、ありがとうございました!

コメント