Raycast только на двух слоях с битовым сдвигом для получения битовой маски

Я прочитал это сообщение и в части 2) Используйте Слои ответа Леосори он использует битовый сдвиг, чтобы получить битовую маску. Я хотел получить объяснение того, как работает битовый сдвиг (я не нашел ответ в руководстве либо).

В примере показано, как выполнять приведение только к 8-му слою:

int layerMask = 1 << 8;
// This would cast rays only against colliders in layer 8.

Итак, как я могу использовать битовый сдвиг, чтобы одновременно получить битовую маску слоев 9 и 10?

В моем проекте у меня есть несколько лучей на моем игроке, чтобы знать, видит ли он какие-то определенные объекты (слой 10). Если объекты находятся за стеной (слой 9), игрок не должен их видеть. Я хотел бы выполнить raycast на обоих слоях и проверить, является ли hit.collider.gameObject.tag «seekObjects». Я знаю, что есть другие решения для этого, но я хотел бы понять, как работает битовый сдвиг.


person Caligari    schedule 12.01.2015    source источник


Ответы (1)


Управление отдельными битами в основном осуществляется с помощью операторов &, |, ~ и <</>>.

Пример (с байтами):

// single value
byte a = 1; // 00000001

// shift "a" 3 bits left
byte b = a << 3; // 00001000

// combine a and b with bitwise or (|)
byte c = a | b; // 00001001

Итак, в вашем случае, чтобы установить бит 9 и бит 10, выполните:

int layerMask = ( 1 << 9 ) | ( 1 << 10 );

Обратите внимание, что мы используем |, а не ||, что является логическим или.

person Chris    schedule 12.01.2015
comment
tbh, ответы здесь намного лучше, чем у Unity. Они размещают свои комментарии в качестве ответов. - person Neon Warge; 26.04.2016