Unity入門

【Unity】Tag・Layerの使い方 | スクリプト、オブジェクト識別、衝突判定、表示・非表示

Unityでオブジェクトを識別したり、特定のオブジェクトだけ衝突を制御したいとき、「タグ(Tag)」「レイヤー(Layer)」を正しく設定することが重要です。

  • 敵・アイテム・プレイヤーなどを識別して処理を分けたい!
  • 特定のオブジェクトだけ衝突を判定したい!
  • カメラで描画するオブジェクトを制御したい!

タグとレイヤーを活用することで、効率的にゲームオブジェクトを管理し、パフォーマンスを最適化できます! この
記事では、タグとレイヤーの基本から、スクリプトでの操作、レイヤーマスクの活用方法、最適化テクニックまで詳しく解説します!

この記事でわかること

  • タグ(タグ)とレイヤー(Layer)の違いと使い方
  • スクリプトでタグ・レイヤーを設定・判定する方法
  • レイヤーマスクを使って衝突を制御する方法
  • カメラの描画設定で特定のレイヤーを非表示にする方法

タグ(Tag)の使い方

タグ(Tag)の設定方法

タグ(Tag)とは、オブジェクトを識別するための名前です
例えば、プレイヤー、敵、アイテム、チェックポイントなどを分類し、スクリプトから簡単に判定することができます。

タグ(Tag)の設定方法

  1. Hierarchyでオブジェクトを選択
  2. InspectorのTagのドロップダウンを開く
  3. 既存のTagを選択(または「Add Tag…」で新規作成)
Unity Tagの設定の画像

タグ(Tag)のスクリプト判定(オブジェクトの識別判定)

CompareTag(“タグ名”)を使うことで、オブジェクトの識別判定が可能!

//プレイヤーに当たったらダメージを与える
void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        Debug.Log("プレイヤーがダメージを受けた!");
    }
}

※ 当たり判定については以下のサイトを参考にしてください。

レイヤー(Layer)とは?

レイヤー(Layer)の設定方法

レイヤー(Layer)とは、オブジェクトをグループ化、衝突判定やカメラの描画を制御する仕組みです

レイヤー(Layer)の設定方法

  1. Hierarchyでオブジェクトを選択
  2. InspectorのLayerのドロップダウンを開く
  3. 既存のLayerを選択(または「Add Layer…」で新規作成)
Unity Layerの設定の画像

レイヤー(Layer)を使って衝突判定を最適化

LayerMaskを使うことで、特定のレイヤーのオブジェクトだけを判定可能!

特定のレイヤーのオブジェクトだけを検出
public LayerMask enemyLayer;

void Update()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 10f, enemyLayer))
    {
        Debug.Log("敵を発見!");
    }
}

レイヤー(Layer)を使ってカメラに映すオブジェクトを制御(表示・非表示)

CullingMaskを使えば、特定のレイヤーのオブジェクトを非表示にできる!

void Start()
{
    int uiLayer = LayerMask.NameToLayer("UI");
    if (uiLayer == -1)
    {
        Debug.LogError("UIレイヤーが存在しません。Unityのレイヤー設定を確認してください。");
        return;
    }

    if (Camera.main != null)
    {
        Camera.main.cullingMask = ~(1 << uiLayer);
    }
    else
    {
        Debug.LogError("Main Cameraが見つかりません。カメラのタグ設定を確認してください。");
    }
}


※ Cameraについては以下のサイトを参考にしてください。

タグ(Tag)レイヤー(Layer)の違い

「タグ」はオブジェクトの種類を識別するのに使い、
  「レイヤー」は衝突や描画の制御に使う!

機能タグ(Tag)レイヤー(Layer)
用途オブジェクトを識別する衝突や描画を制御する
判定CompareTag(“Player”)gameObject.layer
設定可能数制限なし最大32個
衝突判定の最適化できないレイヤーマスクを使用
カメラの描画制御できないカリングマスクを使用

まとめ

タグ(Tag)を使えるなら、オブジェクトをスクリプトで識別できる!
レイヤー(Layer)を簡単に使えるなら、衝突判定やカメラの描画を最適化できる!
LayerMaskを使えるなら、特定のオブジェクトだけ検出可能!
レイヤー(Layer)をうまく整理することで、ゲームの処理を軽量化できる!