Version: 2021.3
言語: 日本語
レイヤーベースの衝突検出
レイヤーマスクの設定

レイヤーとレイヤーマスク

ゲームオブジェクトは全て 1 つのレイヤー上に存在しますが、どのレイヤーに影響を与えるかの設定が可能な Unity API は、レイヤーを直接使用するのではなく、レイヤーマスクを使用します。

layer は標準の整数ですが、layerMask はビットマスクとしてフォーマットされた整数で、全ての 1 は含むレイヤーを表し、全ての 0 は除外するレイヤーを表します。つまり、layer と layerMask は同じ基本の型を使用しているので、layerMask を想定する API に layer を渡した場合にも、スクリプトがコンパイルされます。ただし、API 呼び出しは想定通りの動作を生成しません。

例えば、レイヤー 9 のゲームオブジェクトに対して RayCast (レイキャスト) を実行したい場合、Physics.Raycast の呼び出し内に 9 をレイヤーマスクとして渡すと、Unity は実際にはレイヤー 30 のゲームオブジェクトに対してレイキャストを実行します。これは、9 のバイナリ表現が 00001001 であり、これをマスクとして解釈すると 1 がレイヤー 30 にあるからです。

API 呼び出しで使用するためにレイヤーマスクを設定する方法については、レイヤーマスクの設定 を参照してください。

その他の参考資料

レイヤーベースの衝突検出
レイヤーマスクの設定