L'uso dello spostamento dei bit consente di prendere in considerazione più livelli in un'unica operazione fisica:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
Senza spostamento di bit, ti sarà permesso di effettuare il raycast in uno strato e solo uno. Con lo spostamento dei bit, puoi eseguire il raycast in più livelli specifici:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
Puoi anche effettuare il raycast in tutti i livelli tranne quelli specifici:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Se guardi il "Gestore livelli" in Unity, i livelli possono essere visti come gli indici di un semplice array monodimensionale .
EDIT: non l'ho mai visto prima, ma la LayerMask
classe ha una funzione di utilità per ottenere la maschera di livello "calcolata" dato i nomi dei livelli:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
Supponiamo UserLayerA
e UserLayerB
siano il decimo e l'undicesimo strato. Questi avranno valori User Layer di 10 e 11. Per ottenere il loro valore di maschera di livello i loro nomi possono essere passati in GetMask. L'argomento può essere un elenco dei loro nomi o una matrice di stringhe che memorizzano i loro nomi. In questo caso il valore restituito sarà 2 ^ 10 + 2 ^ 11 = 3072.
Link alla documentazione: https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html