前書き
Unityを使ってゲーム開発を進めていると、「Layer」 と 「Tag」 という設定をよく目にすると思います。一見似たように見えるこの2つですが、異なる役割を持っています。

Unityを始めたばかりだと「どちらを使えばいいの?」と悩みやすいポイントですので、本記事では LayerとTagの違いについて紹介していこうと思います。
Layerとは?
Layer(レイヤー)は、Unity内部での判定や処理を効率化するための分類機能です。
例えば以下のようなケースで利用されます。
- カメラで特定のオブジェクトだけ映す/映さない
- Raycast(レイキャスト)で当たり判定を絞り込む
- 物理演算で衝突させる/させないを制御する
UnityのLayerは最大32個まで作成できます。
プロジェクトの上部メニューから Inspector上部のLayerドロップダウン を開き、新しいLayerを作成して利用します。

例:Raycastで特定のLayerだけ当たり判定する
int layerMask = LayerMask.GetMask("Enemy");
if (Physics.Raycast(ray, out hit, 100f, layerMask))
{
Debug.Log("Enemyにヒットしました");
}
このように、Layerは主に処理効率やフィルタリングを目的に使うのが基本です。
Tagとは?
Tag(タグ)は、オブジェクトにラベルをつける仕組みです。
例えば以下のような用途があります。
- プレイヤーや敵などを判定する
- 特定の種類のオブジェクトを一括で取得する
Tagは文字通り「名札」のようなもので、複数のオブジェクトに同じTagをつけておくと識別が簡単になります。

例:プレイヤーを判定する
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log("プレイヤーが範囲に入りました");
}
}
例:特定のTagを持つオブジェクトをまとめて取得
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
Tagは識別ラベルのため、判定や検索に便利ですが、物理演算やカメラ制御には使えません。
LayerとTagの使い分け方
- 描画や物理演算の制御:Layerを使う
- ゲームのロジックや判定処理:Tagを使う
例えば次のような使い分けができます。
- 敵キャラを「Enemy」Layerに割り当てる
→ レイキャストで敵だけを判定する - 同時にTagも「Enemy」を設定する
→ 敵キャラをまとめて取得する
つまり、Layerはシステム向けの分類、Tagはスクリプト向けの分類と考えると分かりやすいかと思います。
よくある利用シーン
1. プレイヤーの判定
if (other.CompareTag("Player"))
{
// プレイヤーがアイテムを拾ったときの処理
}
2. 敵だけに攻撃を当てる
int enemyLayer = LayerMask.GetMask("Enemy");
if (Physics.Raycast(ray, out hit, 100f, enemyLayer))
{
// 敵にヒット
}
3. カメラで特定オブジェクトを非表示にする
カメラの「Culling Mask」を利用して、特定Layerのオブジェクトを映さないようにできます。
これにより、UI用カメラやエフェクト専用カメラを作ることが可能です。

TopDown Engineなどのテンプレート系アセットを入れると
TopDown Engineなどのテンプレート系アセットを導入すると、あらかじめ用意されたLayerやTagが自動で追加されます。
これらはアセットが正しく動作するために必要な設定なので、変更・削除すると不具合が起きることがあります。自分で追加したものかアセット由来のものかを区別し、編集する際は注意しましょう。
まとめ
- Layerは物理演算やカメラなど内部処理向けの分類
- Tagはスクリプトから識別するためのラベル
- 使い分けることで処理を効率化し、コードをシンプルにできる
Unityのプロジェクトでは、LayerとTagを正しく整理しておくことがバグ防止や整理にも役立ちます。
特にゲームが大きくなると「どのオブジェクトが何に属しているか」が重要になるので、最初のうちから管理ルールを決めておくと安心です。
コメント