ゲームオブジェクトは全て 1 つのレイヤー上に存在しますが、どのレイヤーに影響を与えるかの設定が可能な Unity API は、レイヤーを直接使用するのではなく、レイヤーマスクを使用します。
layer は標準の整数ですが、layerMask はビットマスクとしてフォーマットされた整数で、全ての 1
は含むレイヤーを表し、全ての 0
は除外するレイヤーを表します。つまり、layer と layerMask は同じ基本の型を使用しているので、layerMask を想定する API に layer を渡した場合にも、スクリプトがコンパイルされます。ただし、API 呼び出しは想定通りの動作を生成しません。
例えば、レイヤー 9 のゲームオブジェクトに対して RayCast (レイキャスト) を実行したい場合、Physics.Raycast の呼び出し内に 9
をレイヤーマスクとして渡すと、Unity は実際にはレイヤー 3
と 0
のゲームオブジェクトに対してレイキャストを実行します。これは、9 のバイナリ表現が 00001001
であり、これをマスクとして解釈すると 1
がレイヤー 3
と 0
にあるからです。
API 呼び出しで使用するためにレイヤーマスクを設定する方法については、レイヤーマスクの設定 を参照してください。