ビットシフトを使用すると、1回の物理演算で複数のレイヤーを考慮することができます。
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
ビットシフトがなければ、1つのレイヤーで1つだけレイキャストすることができます。ビットシフトを使用すると、複数の特定のレイヤーでレイキャストできます。
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
特定のレイヤーを除くすべてのレイヤーでレイキャストすることもできます。
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Unityの「レイヤーマネージャー」を見ると、レイヤーは単純な1次元配列のインデックスと見なすことができます。
編集:私は以前にそれを見たことはありませんが、LayerMask
クラスには、レイヤー名を指定して「計算された」レイヤーマスクを取得するユーティリティ関数があります:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
仮定UserLayerA
し、UserLayerB
第10及び第十層です。これらのユーザーレイヤー値は10と11になります。レイヤーマスク値を取得するには、名前をGetMaskに渡すことができます。引数は、名前のリストまたは名前を格納する文字列の配列のいずれかです。この場合、戻り値は2 ^ 10 + 2 ^ 11 = 3072になります。
ドキュメントへのリンク:https : //docs.unity3d.com/ScriptReference/LayerMask.GetMask.html