リンドくん
先生、Unityでゲームを作っているんですけど、敵と味方の弾が当たらないようにしたいんです。どうすればいいですか?
たなべ
それにはUnityのLayer(レイヤー)とTag(タグ)という機能を使うといいよ。
これを使えば、どのオブジェクト同士が衝突するかを簡単にコントロールできるんだ。
リンドくん
レイヤーとタグ...なんだか難しそうですね。
たなべ
大丈夫!実はとてもシンプルな仕組みなんだよ。
今日はLayerとTagの基本的な使い方から、衝突制御の設定方法まで、順番に解説していくね。
Unityでゲームを開発していると、「特定のオブジェクト同士だけ衝突させたい」「敵だけを検出したい」といった場面に必ず出会います。
こうした制御を行わないと、味方の弾が味方に当たってしまったり、プレイヤーが通れない場所を敵がすり抜けてしまったりと、ゲームとして成立しなくなってしまいます。
そこで活躍するのがLayer(レイヤー)とTag(タグ)という2つの機能です。
どちらもUnityに標準で搭載されている機能で、適切に使い分けることで、衝突判定の制御やオブジェクトの効率的な管理が可能になります。
この記事では、LayerとTagそれぞれの役割と使い方、そして実践的なサンプルコードを交えながら、初心者の方にもわかりやすく解説していきます。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
まず最初に押さえておきたいのが、LayerとTagの違いです。
どちらも「オブジェクトを分類する」という点では似ていますが、目的と使い方が異なります。
Layerは主に物理演算やレンダリングの制御に使用します。
最も重要な用途は、衝突判定のオン・オフを切り替えることです。
例えば、以下のような場面で活躍します。
Layerは最大32個まで作成でき、Unity全体のPhysics設定と連携して動作します。
Tagは主にスクリプトからオブジェクトを識別するために使用します。
衝突判定そのものには直接関与せず、「このオブジェクトは何か」を判別するためのラベルのような役割を果たします。
例えば、以下のような場面で活躍します。
簡単にまとめると、以下のように使い分けるとよいでしょう。
この2つを組み合わせることで、複雑なゲームロジックもスマートに実装できます。
リンドくん
レイヤーって、どうやって設定するんですか?
たなべ
Unityのエディタから簡単に設定できるよ。
まずは新しいレイヤーを作成して、それをオブジェクトに割り当てるという流れになるんだ。

レイヤー設定画面

レイヤーをオブジェクトに設定
ここが最も重要な部分です。
作成したLayer同士が衝突するかどうかは、Physics設定のCollision Matrix(衝突マトリクス)で制御します。

Collision Matrix設定画面
この設定はプロジェクト全体に適用されるため、一度設定すれば個々のオブジェクトで何かする必要はありません。
リンドくん
タグの方はどうやって使うんですか?
たなべ
タグも同じように作成して割り当てるんだけど、スクリプトから判定に使うという点が大きな違いだね。
実際のコードを見てみよう。
+ボタンをクリック
タグ設定画面
Layerと違い、Tagは1つのオブジェクトに1つだけしか割り当てられません。

タグをオブジェクトに設定
Tagの真価は、スクリプトで相手のオブジェクトを識別するときに発揮されます。
以下は、衝突した相手が「Enemy」タグを持っているかどうかを判定するサンプルコードです。
CompareTag()メソッドを使うことで、効率的にタグを比較できます。
other.tag == "Enemy"という書き方もできますが、CompareTag()の方がパフォーマンスが良いため、こちらを使うことをおすすめします。
タグを使えば、シーン内の特定のオブジェクトを簡単に見つけることもできます。
ただし、Find系のメソッドは処理が重いため、頻繁に呼び出すのは避けましょう。
Start()やAwake()で一度だけ取得して、変数に保持しておくのがベストプラクティスです。
リンドくん
なるほど!レイヤーは「当たるかどうか」、タグは「何に当たったか」を判断するんですね。
たなべ
その通り!この2つをうまく使い分けることで、ゲームの制御がとても楽になるよ。
最初は混乱するかもしれないけど、実際に手を動かして試してみると、すぐに理解できるはずだよ。
リンドくん
早速、自分のプロジェクトで試してみます!
たなべ
いいね!最後に今日のポイントをまとめておくから、復習に使ってね。
この記事では、UnityのLayerとTagについて解説してきました。
最後に重要なポイントを整理しておきましょう。
CompareTag()を使って判定CompareTag()を使うFind系メソッドは初期化時のみ使用するLayerとTagは、Unityでゲームを作る上で絶対に避けて通れない基礎知識です。
最初は少し複雑に感じるかもしれませんが、一度理解してしまえば、様々な場面で応用できる強力なツールになります。
ぜひ実際のプロジェクトで試してみて、衝突制御やオブジェクト管理の効率化を体感してみてください。