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

1

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

Теги:
unity3d
bit-shift
raycasting
bitmask

1 ответ

2
Лучший ответ

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

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

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

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

  • 0
    Большое спасибо!! Мне теперь понятно :)
  • 1
    ТБХ, ответы здесь намного лучше, чем ответы Unity. Они помещают свои комментарии как ответы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню