Я прочитал этот пост и в части 2) Использование слоев Leosori отвечает, что он использует бит-сдвиг, чтобы получить бит-маску. Я хотел получить объяснение, как работает бит-сдвиг (я тоже не нашел свой ответ в руководстве).
В этом примере показано, как отливать только слой 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". Я знаю, что есть другие решения для этого, но я хотел бы понять, как работает бит-сдвиг.
Манипулирование отдельными битами в основном выполняется с помощью &
, |
, ~
и <</>>
.
Пример (с байтами):
// 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 );
Обратите внимание, что мы используем |
а не ||
, что логично или.