Четверг, 20 Февраля 2020, 11:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Система игнорирования слоев (Raycast) (Raycast)
Система игнорирования слоев (Raycast)
SomeOneInTheMaskДата: Понедельник, 07 Октября 2013, 02:07 | Сообщение # 1
Stranger
Сейчас нет на сайте
Всем здорова!
Как вы знаете вот так выглядит функция Raycast:

Код
static bool Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask);


Вполне очевидно как задаются и за что отвечают параметры: Vector3 origin, Vector3 direction, float distance (если кто не знает, как их задать, есть манумал или мои уроки 1 2)

Я хочу вам рассказать о параметре layerMask. Он отвечает за те слои, которые луч не будет игнорировать (то есть возвращать true при пересечении их).
Для этого нам понадобиться двоичная система счисления... в ней в отличии от от десятичной для задания чисел используется только 1 и 0. (0, 1, 10, 11, 100... )
Например (первое число записано в двоичной, а второе в десятичной):
0=0
1=1
10=2
11=3
100=4 и так далее

Нам нужно будет переводить число из двоичной в десятичную запись. Для этого можно использовать инженерный калькулятор или старый дедовский способ smile


Начинаем писать наше число с права налево. Если вы хотите, чтобы слой не был игнорируемым, тогда пишете 1, в противном случае 0.
Для картинки слои 1,2,5,6,7 рабочие.



Число полученное после перевода (то есть 230) пишем в функцию.

Если написать 0 то луч будет игнорировать все слои, если написать -1 тогда все слои будут рабочими для луча.
Вообще для отрицательных чисел все то же самое, только в точности наоборот и отсчет пойдет с -2, поскольку -1 это противоположность нуля. То есть при -2 игнорируется нулевой слой.
При записи числа в двоичной системе, пишем все так же с лева на право, но на этот раз, если хотите, чтобы слой не был игнорируемым, тогда пишете 0, в противном случае 1. Но после перевода не забудьте абсолютное значение увеличить на 1 smile
Для картинки слои 0,3,4,8,9,10,11... рабочие.

Видео урок по этой теме


Карта моего канала по созданию игр на Unity3d, можно даже заказать урок бесплатно)

Сообщение отредактировал SomeOneInTheMask - Понедельник, 07 Октября 2013, 02:09
allodsДата: Понедельник, 07 Октября 2013, 02:43 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
А есл мне нужно игнорить слой terrain? то что мне писать

Сообщение отредактировал allods - Понедельник, 07 Октября 2013, 02:44
nwsxДата: Понедельник, 07 Октября 2013, 02:55 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
неудобно наверное тебе игру делать, братюнь - в одной руке инженерный калькулятор, в другой счёты.

private static LayerMask ground = 1 << 8;
private static LayerMask obstacle = 1 << 9;
private static LayerMask unit = 1 << 11;

public static LayerMask bulletImpactLayers = ground | obstacle | unit;

wink


Westboro
Dungeon Journey на Google Play
KamiRoninДата: Понедельник, 07 Октября 2013, 12:51 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата (allods)
А есл мне нужно игнорить слой terrain? то что мне писать

у террайна тоже есть слой, а у этого слоя - номер. вот в бит под этим номером и пиши "1", а потом пересчитывай.
или вон, с битовым сдвигом (#3) попробуй, так .. мм.. ТИПА нагляднее! smile


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
SomeOneInTheMaskДата: Вторник, 08 Октября 2013, 16:05 | Сообщение # 5
Stranger
Сейчас нет на сайте
Цитата (nwsx)
братюнь - в одной руке инженерный калькулятор, в другой счёты.

я по образованию инженер и у меня есть программируемый калькулятор, но в тоже время я иногда считаю в столбик на бумажке или на глазок прикидываю...
когда постоянно на кнопки жмешь, человек отупевает и потом уже не способен отойти от набора каких-то функций и логически рассуждать. А когда человек знает как устроена функция изнутри тогда он способен анализировать.... тут был пару дней назад парнишка который сделал игру, а интеллект написать не может, хотя там все просто было.
Так что новичкам полезно научиться думать smile


Карта моего канала по созданию игр на Unity3d, можно даже заказать урок бесплатно)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Система игнорирования слоев (Raycast) (Raycast)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2020 Рейтинг