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

59
6

Я прочитал этот пост и в части 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". Я знаю, что есть другие решения для этого, но я хотел бы понять, как работает бит-сдвиг.

спросил(а) 2015-01-12T19:05:00+03:00 5 лет, 10 месяцев назад
1
Решение
72

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

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

// 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 );

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

ответил(а) 2015-01-12T19:34:00+03:00 5 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема