L'utilisation du décalage de bits vous permet de prendre en compte plusieurs couches en une seule opération physique:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
Sans décalage de bit, vous seriez autorisé à diffuser des rayons en une seule couche et une seule. Avec le décalage de bits, vous pouvez diffuser des rayons en plusieurs couches spécifiques:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
Vous pouvez également diffuser des rayons dans toutes les couches sauf celles spécifiques:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Si vous regardez le "Gestionnaire de calques" dans Unity, les calques peuvent être considérés comme les indices d'un simple tableau à une dimension .
EDIT: Je ne l'ai jamais vu auparavant, mais le LayerMask
classe a une fonction utilitaire pour obtenir le masque de calque "calculé" étant donné les noms des calques:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
Supposer UserLayerA
que ce UserLayerB
sont les dixième et onzième couches. Ceux-ci auront une valeur de couche utilisateur de 10 et 11. Pour obtenir leur valeur de masque de couche, leurs noms peuvent être passés dans GetMask. L'argument peut être soit une liste de leurs noms, soit un tableau de chaînes stockant leurs noms. Dans ce cas, la valeur de retour sera 2 ^ 10 + 2 ^ 11 = 3072.
Lien vers la documentation: https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html