Всем здорова! Как вы знаете вот так выглядит функция Raycast:
Код
static bool Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask);
Вполне очевидно как задаются и за что отвечают параметры: Vector3 origin, Vector3 direction, float distance (если кто не знает, как их задать, есть манумал или мои уроки 12)
Я хочу вам рассказать о параметре layerMask. Он отвечает за те слои, которые луч не будет игнорировать (то есть возвращать true при пересечении их). Для этого нам понадобиться двоичная система счисления... в ней в отличии от от десятичной для задания чисел используется только 1 и 0. (0, 1, 10, 11, 100... ) Например (первое число записано в двоичной, а второе в десятичной): 0=0 1=1 10=2 11=3 100=4 и так далее
Нам нужно будет переводить число из двоичной в десятичную запись. Для этого можно использовать инженерный калькулятор или старый дедовский способ
Число лучше выписать на бумажку и пронумеровать порядки с права налево (самый правый это нулевой). Смотрите картинку ниже.
число в десятичной системе (пускай это будет х) равно = сумме произведений цифр этого числа на 2 возведенную в степень равную индексу этой цифры Короче говоря, по очереди перебираем цифры с права налево. Если ноль тогда пропускаем, если 1, то к х прибавляем 2 в степени порядка, тобишь при 0 плолучем 1, при 1 получаем 2, при 2 получаем 4, при 3 8 ....
х=2+4+32+64+128=230 (это для числа с картинки)
Начинаем писать наше число с права налево. Если вы хотите, чтобы слой не был игнорируемым, тогда пишете 1, в противном случае 0. Для картинки слои 1,2,5,6,7 рабочие.
Число полученное после перевода (то есть 230) пишем в функцию.
Если написать 0 то луч будет игнорировать все слои, если написать -1 тогда все слои будут рабочими для луча. Вообще для отрицательных чисел все то же самое, только в точности наоборот и отсчет пойдет с -2, поскольку -1 это противоположность нуля. То есть при -2 игнорируется нулевой слой. При записи числа в двоичной системе, пишем все так же с лева на право, но на этот раз, если хотите, чтобы слой не был игнорируемым, тогда пишете 0, в противном случае 1. Но после перевода не забудьте абсолютное значение увеличить на 1 Для картинки слои 0,3,4,8,9,10,11... рабочие.
А есл мне нужно игнорить слой terrain? то что мне писать
у террайна тоже есть слой, а у этого слоя - номер. вот в бит под этим номером и пиши "1", а потом пересчитывай. или вон, с битовым сдвигом (#3) попробуй, так .. мм.. ТИПА нагляднее! Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
братюнь - в одной руке инженерный калькулятор, в другой счёты.
я по образованию инженер и у меня есть программируемый калькулятор, но в тоже время я иногда считаю в столбик на бумажке или на глазок прикидываю... когда постоянно на кнопки жмешь, человек отупевает и потом уже не способен отойти от набора каких-то функций и логически рассуждать. А когда человек знает как устроена функция изнутри тогда он способен анализировать.... тут был пару дней назад парнишка который сделал игру, а интеллект написать не может, хотя там все просто было. Так что новичкам полезно научиться думать Карта моего канала по созданию игр на Unity3d, можно даже заказать урок бесплатно)