O uso de deslocamento de bits permite levar em consideração várias camadas em uma operação física:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
Sem troca de bits, você seria autorizado a transmitir raios em uma camada e apenas uma. Enquanto com a mudança de bits, você pode transmitir em raios em várias camadas específicas:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
Você também pode transmitir raios em todas as camadas, exceto as específicas:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Se você olhar para o "Gerenciador de camadas" no Unity, as camadas poderão ser vistas como os índices de uma matriz simples de uma dimensão .
EDIT: Eu nunca vi isso antes, mas a LayerMask
classe tem uma função de utilitário para obter a máscara de camada "computada", dados os nomes das camadas:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
Suponha UserLayerA
e UserLayerB
seja a décima e a décima primeira camadas. Eles terão um valor de camada de usuário de 10 e 11. Para obter o valor da máscara de camada, seus nomes podem ser passados para o GetMask. O argumento pode ser uma lista de seus nomes ou uma matriz de cadeias armazenando seus nomes. Nesse caso, o valor de retorno será 2 ^ 10 + 2 ^ 11 = 3072.
Link para a documentação: https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html