Слои в Unity определяют, какие игровые объекты могут взаимодействовать с различными функциями и друг с другом. Чаще всего они используются КамерамиКомпонентом, который создает изображение определенной точки обзора в вашей сцене. Вывод либо рисуется на экране, либо фиксируется в виде текстуры. Подробнее
См. в Словарь для отображения только части sceneСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь и Lights для освещения только части сцены. Но их также можно использовать при raycasting для выборочного игнорирования коллайдеровневидимой формы, которая используется для обработки физических столкновений объекта. Коллайдер не обязательно должен быть точно такой же формы, как сетка объекта — грубое приближение часто бывает более эффективным и неразличимым в игровом процессе. Подробнее
Посмотреть в Словарь или создать столкновенияСтолкновение происходит, когда физический движок обнаруживает, что коллайдеры двух игровых объектов соприкасаются или перекрываются, когда хотя бы один из них имеет Rigidbody компонент и находится в движении. Подробнее
См. в Словарь.
Создание слоев
Первый шаг — создать новый слой, который затем можно назначить GameObjectфундаментальному объекту в сценах Unity. , который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь. Чтобы создать новый слой, откройте окно Теги и слои (главное меню: Правка > Настройки проекта, затем выберите категорию Теги и слои).
Мы создаем новый слой в одном из пустых пользовательских слоев. Мы выбираем слой 8.

Назначение слоев
Теперь, когда вы создали новый слой, вы можете назначить его одному или нескольким игровым объектам.
Каждому игровому объекту можно назначить только один слой.

В окне Теги и слои слой Player назначается слою 8.
Отрисовка только части Сцены с маской выбраковки камеры
Использование маски выделения камерыПозволяет включать или опускать объекты, которые должны отображаться камерой, по слоям.
См. в Словарь, вы можете выборочно визуализировать объекты, которые находятся в одном конкретном слое.
Для этого выберите камеру, которая должна выборочно отображать объекты.
Измените маску отсечения, установив или сняв отметку со слоями в свойстве маски отсечения.

Учтите, что UI(пользовательский интерфейс) позволяет пользователю взаимодействовать с вашим приложением. Подробнее
Элементы See in Словарь не отбраковываются. Дети холста экранного пространства не уважают маску выбраковки камеры.
Выборочное использование лучей
Используя слои, вы можете создавать лучи и игнорировать коллайдеры в определенных слоях. Например, вы можете направить луч только на слой игрока и игнорировать все остальные коллайдеры.
Функция Physics.Raycast принимает битовую маску, где каждый бит определяет, будет ли слой игнорироваться или нет. Если все биты в LayerMask включены, мы столкнемся со всеми коллайдерами. Если layerMask = 0, мы никогда не обнаружим никаких столкновений с лучом.
int layerMask = 1 << 8;
// Does the ray intersect any objects which are in the player layer.
if (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask))
{
Debug.Log("The ray hit the player");
}
Однако в реальном мире вы хотите сделать обратное. Мы хотим направить луч на все коллайдеры, кроме тех, что находятся в слое Player.
void Update ()
{
// Bit shift the index of the layer (8) to get a bit mask
int layerMask = 1 << 8;
// This would cast rays only against colliders in layer 8.
// But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.
layerMask = ~layerMask;
RaycastHit hit;
// Does the ray intersect any objects excluding the player layer
if (Physics.Raycast(transform.position, transform.TransformDirection (Vector3.forward), out hit, Mathf.Infinity, layerMask))
{
Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) * hit.distance, Color.yellow);
Debug.Log("Did Hit");
}
else
{
Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) *1000, Color.white);
Debug.Log("Did not Hit");
}
}
Если вы не передаете LayerMask функции Raycast, она будет игнорировать только те коллайдеры, которые используют слой IgnoreRaycast. Это самый простой способ игнорировать некоторые коллайдеры при создании луча.
Примечание. Слой 31 используется внутри механики окна предварительного просмотра редактора. Во избежание конфликтов не используйте этот слой.
- Информация о маске отбраковки обновлена в Unity 2017.1