ゲームオブジェクトは全て 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 呼び出しで使用するためにレイヤーマスクを設定する方法については、レイヤーマスクの設定 を参照してください。