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