Mit der Bitverschiebung können Sie mehrere Schichten in einer physikalischen Operation berücksichtigen:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
Ohne Bitverschiebung könnten Sie in einer Schicht und nur in einer Schicht strahlen. Während der Bitverschiebung können Sie Raycasts in mehreren spezifischen Ebenen durchführen:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
Sie können auch Raycasts in allen Ebenen mit Ausnahme bestimmter senden :
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Wenn Sie sich den "Ebenenmanager" in Unity ansehen , können Ebenen als Indizes eines einfachen eindimensionalen Arrays angesehen werden .
EDIT: Ich habe es noch nie gesehen, aber die LayerMask
Klasse hat eine Utility-Funktion, um die "berechnete" Ebenenmaske mit den Ebenennamen zu erhalten:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
Angenommen, UserLayerA
und UserLayerB
sind die zehnte und elfte Schicht. Diese haben einen Benutzerebenenwert von 10 und 11. Um ihren Ebenenmaskenwert zu erhalten, können ihre Namen an GetMask übergeben werden. Das Argument kann entweder eine Liste ihrer Namen oder ein Array von Zeichenfolgen sein, in denen ihre Namen gespeichert sind. In diesem Fall beträgt der Rückgabewert 2 ^ 10 + 2 ^ 11 = 3072.
Link zur Dokumentation: https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html