UnityUnityの使い方

Unityの使い方⑰ タグを使って効率的にオブジェクトを管理しよう

Unity

はじめに

Unityでゲームを作っていると、たくさんのオブジェクトを管理する必要が出てきますよね。例えば、敵キャラやアイテムが増えると、「どれがどれだか分からない!」なんてことも。そんな時に便利なのが「タグ」です!タグを使うと、特定のオブジェクトを簡単に探したり、一括で操作したりできます。

この記事では、Unity初心者でも分かるように、タグの使い方や設定方法を詳しく解説していきます。

初心者の方でも安心して使えるように、手順を丁寧に紹介しますね。それでは、さっそく始めてみましょう!


タグの基本

Unityの「タグ」は、ゲームオブジェクトにラベルを付けるような機能です。このラベルを使うことで、特定のオブジェクトを簡単に識別したり、スクリプトで操作することができます。たとえば、敵キャラクターには「Enemy」、アイテムには「Item」といったタグを付けることで、整理がしやすくなります。


タグの仕組み

タグは、オブジェクトごとに1つだけ設定することができます。デフォルトで用意されているタグもありますが、独自のカスタムタグを作成することも可能です。これにより、ゲームに合わせた管理がしやすくなります。


タグの用途

  1. オブジェクトの識別
    特定のオブジェクトをタグで分けて、スクリプト内で条件分岐に使えます。 例: 「タグが『Enemy』ならダメージ処理を実行」
  2. グループ操作
    同じタグが付いた複数のオブジェクトを一括で操作できます。 例: 敵キャラクターを全員非表示にする。
  3. 衝突判定
    衝突イベントで「タグ」に基づいて処理を分けることが可能です。

デフォルトタグ一覧

Unityにはあらかじめいくつかのタグが用意されています:

  • Untagged: タグなし(初期設定)
  • Respawn: リスポーンポイント用
  • Finish: ゴール地点などに使用
  • MainCamera: メインカメラに自動で設定されるタグ
  • Player: プレイヤー用

もちろん、これら以外にも自分でタグを追加して使えます。




タグの設定方法

ここでは、Unityで「タグ」を作成し、それをオブジェクトに設定する具体的な方法を説明します。初心者の方でも簡単にできるように、手順を一つずつ見ていきましょう!


手順1: タグを作成する

まず、カスタムタグを作成してみましょう。

  1. オブジェクトを選択する
    ヒエラルキー(Hierarchy)ウィンドウから、タグを設定したいオブジェクトを選択します。
  2. タグ編集メニューを開く
    インスペクター(Inspector)ウィンドウの「Tag」ドロップダウンメニューをクリックします。
  3. 「Add Tag…」を選択
    ドロップダウンの一番下にある「Add Tag…」をクリックします。
  4. タグを追加
    タグ管理画面が開きます。右上にある「+」ボタンをクリックして新しいタグを追加します。
  5. タグ名を入力
    作成したいタグ名を入力します(例: “Enemy”, “Item”, “Player” など)。
  6. 保存
    入力したら「Save」をクリックしてタグを保存します。

手順2: タグをオブジェクトに設定する

作成したタグをオブジェクトに適用します。

  1. オブジェクトを選択
    再度ヒエラルキーウィンドウからタグを設定したいオブジェクトを選択します。
  2. タグを設定
    インスペクターウィンドウの「Tag」ドロップダウンメニューをクリックし、リストから作成したタグを選択します。
  3. 完了
    選択したオブジェクトにタグが設定されました。

例: タグを使ったオブジェクトの分類

  • 敵キャラクター: Enemy タグ
  • プレイヤー: Player タグ
  • アイテム: Item タグ

これで、ゲーム内のオブジェクトを簡単に分類して管理できるようになります!




タグを活用したスクリプトの作成例

Unityでは、タグを活用することで、スクリプトを使った効率的なオブジェクト操作が可能になります。ここでは、具体的なスクリプト例を通じて、タグの便利な使い方を解説します。


例1: 衝突判定でタグを使う

ゲーム内で特定のオブジェクト(例えば敵)と衝突したときに、何かを起こしたい場合に役立ちます。

スクリプト例

using UnityEngine;

public class CollisionTagCheck : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        // 衝突したオブジェクトのタグを確認
        if (collision.gameObject.tag == "Enemy")
        {
            // 敵に衝突した場合、そのオブジェクトを削除
            Destroy(collision.gameObject);
            Debug.Log("Enemyを倒しました!");
        }
    }
}

解説:

  • collision.gameObject.tag を使って衝突したオブジェクトのタグを確認します。
  • タグが “Enemy” の場合、そのオブジェクトを Destroy で削除します。

例2: タグを使って複数のオブジェクトを一括操作する

同じタグを持つオブジェクトを一括で管理したい場合に便利です。

スクリプト例

csharpコードをコピーするusing UnityEngine;

public class DeactivateEnemies : MonoBehaviour
{
    void Start()
    {
        // タグが "Enemy" のすべてのオブジェクトを取得
        GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");

        foreach (GameObject enemy in enemies)
        {
            // それぞれの敵を非アクティブ化
            enemy.SetActive(false);
        }

        Debug.Log($"非アクティブ化した敵の数: {enemies.Length}");
    }
}

解説:

  • GameObject.FindGameObjectsWithTag を使ってタグが “Enemy” のオブジェクトをすべて取得。
  • SetActive(false) を使って非アクティブ化(画面から消えるが削除はされない)。

例3: タグを条件にしたカメラ追尾

プレイヤーだけを追尾するカメラを作成します。

スクリプト例

using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public float speed = 5.0f; // カメラの追尾速度

    void Update()
    {
        // タグが "Player" のオブジェクトを取得
        GameObject player = GameObject.FindGameObjectWithTag("Player");

        if (player != null)
        {
            // プレイヤーの位置にカメラを追尾
            Vector3 targetPosition = player.transform.position;
            transform.position = Vector3.Lerp(transform.position, targetPosition, speed * Time.deltaTime);
        }
    }
}

解説:

  • GameObject.FindGameObjectWithTag を使ってプレイヤー(”Player” タグ)を取得。
  • カメラがプレイヤーをスムーズに追尾するように Vector3.Lerp を使用。



タグを使うときの注意点

タグはUnityでオブジェクトを効率的に管理する便利な機能ですが、使い方を間違えるとパフォーマンスや管理が難しくなる場合があります。ここでは、タグを使う際の注意点やベストプラクティスを紹介します。


1. タグの命名規則を決める

タグ名はプロジェクト全体で一貫性を持たせることが大事です。

悪い例:

  • enemy1enemy2 のように番号を付ける。
  • 記号やスペースを含む名前。

良い例:

  • EnemyPlayerItem などシンプルで直感的な名前。
  • 大文字と小文字を統一する(例: 全て先頭大文字など)。

理由: 一貫性がないと後から管理が煩雑になります。


2. タグは1つのオブジェクトに1つだけ

Unityでは1つのオブジェクトに複数のタグを設定することはできません。異なるグループに属する場合はタグだけでなく、レイヤー(Layer)やカスタムプロパティも活用しましょう。

対策: 複数の条件で分類したい場合、スクリプトで追加の条件を実装するか、レイヤー機能を併用。


3. タグの誤入力に注意

スクリプトでタグ名を手入力する場合、スペルミスが原因で動作しないことがあります。

悪い例:

if (gameObject.tag == "enemy") // 本当は "Enemy"

良い例:

if (gameObject.CompareTag("Enemy"))
  • CompareTag を使うと、間違いを防ぎ、パフォーマンスも向上します。

4. パフォーマンスの考慮

  • GameObject.FindGameObjectsWithTagGameObject.FindGameObjectWithTag は毎フレーム呼び出すと処理が重くなります。

対策:

  • 初期化時(StartAwake)にタグ付きオブジェクトをリストに保存しておき、必要に応じてリストを利用。
  • Update関数内で頻繁に呼び出すのを避ける。

5. タグの削除や変更に注意

一度設定したタグを削除したり名前を変更すると、それを使用していたスクリプトに影響が出ます。

対策:

  • タグを変更・削除する前に、どのスクリプトで使用されているか確認。
  • 必要に応じてタグ名を変更した後、すべてのスクリプトを更新。

6. タグの使用上限

Unityではタグを最大10,000個まで作成可能ですが、実際には数十~数百個程度に抑えるのが理想です。タグが多すぎると、管理が複雑になり逆に非効率になる場合があります。




まとめ

Unityの「タグ」を使えば、オブジェクトの管理がグッと効率的になります。今回紹介した方法を活用して、ゲーム制作をもっとスムーズに進めてみてください!

Unity初心者でも簡単!アセットを活用してゲーム開発を加速しよう!

Unity Asset Storeには、初心者でもすぐに使える便利なアセットがたくさんあります。
でも「どれを使えばいいの?」「どう活用すればいいの?」と迷っていませんか?

この記事では、初心者向けのおすすめアセットとその活用法を詳しく解説!
ゲーム開発をもっと楽しく、効率的に進めたいなら必見です!



よくある質問 (Q&A)

Q
タグは何個まで作成できますか?
A

Unityでは最大10,000個まで作成可能です。

Q
タグを削除する方法は?
A

「Add Tag…」メニューから不要なタグを選択して削除できます。

Q
スクリプトでタグを設定することは可能ですか?
A

はい、以下のコードで可能です:

gameObject.tag = "Enemy";