Skip to content
Радорама
Menu
  • SkillForce2
  • Другие игры
  • Unity
  • Блог
  • Творчество
  • Контакты
  • Поддержать
Menu

Маска слоя для Raycast

Posted on 26.02.202126.02.2021 by radoar

Функция Raycast использует в качестве одного из параметров int layerMask — маску слоя. Поскольку layerMask имеет тип int, она состоит из 32 битов:

0000 0000 0000 0000 0000 0000 0000 0000

где каждый бит (считая справа-налево) — номер слоя. (Первый бит справа — это слой 0 — «Default», второй бит — слой 1 — «TransparentFX», третий — слой 2 — «Ignore Raycast» и т.д.)

Если мы хотим использовать слой номер n, нам нужно установить соответствующий бит в единицу. Например нам нужно использовать слой 1 (TransparentFX), это значит, что второй бит справа должен быть единицей (в десятеричном исчислении — это число 2). Второй — потому что нумерация ведётся с нуля, 0, 1, 2 и т.д.

0000 0000 0000 0000 0000 0000 0000 0010

Если нужно использовать слой 2 (Ignore Raycast), это значит, что третий бит справа должен быть единицей (в десятеричном исчислении — это число 4)

0000 0000 0000 0000 0000 0000 0000 0100

Установить нужный бит можно несколькими способами:
int layerMask = 4;
// просто присваиваем нужно значение
int layerMask = LayerMask.NameToLayer(«Ignore Raycast»);
// находим числовое значение слоя с помощью его имени
int layerMask = 1 << 2;
// побитовый сдвиг

Рассмотрим последний способ.

Единица (int) — это

0000 0000 0000 0000 0000 0000 0000 0001

Побитовый сдвиг единицы  1 << n (грубо говоря) «сдвигает» самый правый бит равный 1 на n позиций влево. Таким образом,

int layerMask = 1 << 1;  // 0000 0000 0000 0000 0000 0000 0000 0010
int layerMask = 1 << 2;  // 0000 0000 0000 0000 0000 0000 0000 0100
int layerMask = 1 << 3;  // 0000 0000 0000 0000 0000 0000 0000 1000

и т.д.

Над масками можно совершать битовые операции. Например, нам нужна маска, которая бы включала в себя 4 и 8 слои.

int layer4 = 1 << 4;  // 0000 0000 0000 0000 0000 0000 0001 0000
int layer8 = 1 << 8;  // 0000 0000 0000 0000 0000 0001 0000 0000
int layerMask = layer4 | layer8;  // 0000 0000 0000 0000 0000 0001 0001 0000

или просто

int layerMask = 1 << 4 | 1 << 8

28

SkillForce2

  • Главная
  • >> Поддержка <<
  • Об игре
  • Форум
  • Скриншоты
  • Видео
  • Играть

Войти

Регистрация

©2021 Радорама | Built using WordPress and Responsive Blogily theme by Superb