В PlayCanvas слои (layers) используются для организации объектов в сцене и для управления их рендерингом. Каждый объект может быть привязан к одному или нескольким слоям, что позволяет контролировать, какие объекты будут отображаться в определённых условиях. Это особенно полезно для создания сложных сцен, где нужно, например, разделить объекты на слои, отвечающие за различные части сцены или типы объектов.
Каждый объект в PlayCanvas имеет свойство layers,
которое является коллекцией слоёв, к которым он принадлежит. Слои в
PlayCanvas работают в виде битовой маски, где каждому слою соответствует
определённая битовая позиция. Когда объект привязан к слою, этот бит
устанавливается в 1, и объект будет отображаться на этом слое.
Создание и управление слоями начинается с их инициализации в
контексте приложения. Чтобы работать с слоями, необходимо использовать
систему слоёв, которая доступна через pc.layers в
PlayCanvas.
Для создания нового слоя можно использовать метод
addLayer объекта pc.layers. Это создаст новый
слой, который можно будет привязать к объектам сцены.
Пример кода для создания слоя:
var layer = this.app.layers.createLayer('newLayer');
Метод createLayer возвращает новый слой, который затем
можно использовать для привязки объектов.
Для того чтобы добавить объект в конкретный слой, необходимо
использовать его свойство layers. Для этого создаётся
объект pc.Layer и добавляется в коллекцию
layers объекта.
Пример добавления объекта в слой:
var layer = this.app.layers.getLayerByName('newLayer');
entity.layers.add(layer);
Этот код получает слой по имени, а затем добавляет сущность
(entity) в этот слой. В результате, объект будет
отображаться только в том случае, если слой активен для камеры.
Чтобы удалить объект из конкретного слоя, можно воспользоваться
методом remove:
entity.layers.remove(layer);
После выполнения этой операции объект больше не будет виден на этом слое. Это особенно полезно для динамического изменения видимости объектов в сцене в зависимости от ситуации.
Для управления видимостью объектов в слое можно использовать параметр
visible слоев. По умолчанию все слои видимы, но при
необходимости можно скрывать или показывать их.
Пример скрытия слоя:
layer.visible = false;
Этот код скрывает все объекты, привязанные к слою, и они больше не будут отображаться в рендере. Обратите внимание, что это не удаляет объекты из сцены, а просто делает их невидимыми.
В PlayCanvas объекты могут быть привязаны к нескольким слоям одновременно. Для этого достаточно добавить их в несколько слоёв:
var layer1 = this.app.layers.createLayer('layer1');
var layer2 = this.app.layers.createLayer('layer2');
entity.layers.add(layer1);
entity.layers.add(layer2);
Этот код добавляет объект в два слоя, что позволяет ему быть отображённым на обоих слоях одновременно. Такой подход используется, например, для создания эффектов или наложений, когда один и тот же объект должен быть видим на разных уровнях сцены.
Каждая камера в PlayCanvas также имеет свойство layers,
которое позволяет управлять тем, какие слои она будет рендерить. Это
даёт возможность управлять видимостью объектов для конкретных камер. Для
добавления слоя к камере, можно использовать следующий код:
this.camera.layers.add(layer);
Этот код позволяет камере рендерить только те объекты, которые находятся в заданных слоях. Это полезно, если в сцене используется несколько камер с разными задачами — например, одна камера может отображать только главный слой, а другая — слой с эффектами или пользовательским интерфейсом.
Одним из популярных способов использования слоёв в PlayCanvas является применение различных фильтров и эффектов. Например, можно создать специальный слой для отображения объектов с эффектами постобработки (например, Bloom или Blur), чтобы эти эффекты не затрагивали остальные объекты сцены.
Для этого создаётся отдельный слой, в который добавляются все объекты с эффектами. Камера с постобработкой будет рендерить только объекты, привязанные к этому слою, в то время как остальные объекты сцены будут рендериться без применения эффектов.
Использование слоёв позволяет оптимизировать рендеринг и повысить производительность, так как можно скрывать объекты, которые не видны на экране или не активны в данный момент. Кроме того, можно использовать слои для разделения объектов, которые должны быть отрендерены с разной частотой обновлений, например, объекты на фоне и в центре сцены.
При создании сложных сцены с несколькими камерами слои могут быть использованы для разделения контента, который каждая камера должна видеть. Например, одна камера может рендерить только основной игровой мир, а другая — пользовательский интерфейс, а также элементы, такие как объекты меню или HUD, которые не должны пересекаться с игрой.
Для этого на каждом слое можно настроить собственный набор объектов, привязанных к слою, и затем управлять их видимостью для каждой камеры через настройки слоёв. Такой подход позволяет гибко настраивать отображение объектов в зависимости от различных сценариев.
Работа с слоями в PlayCanvas даёт разработчикам мощный инструмент для управления видимостью объектов, оптимизации рендеринга и создания сложных сцен. Возможность добавлять объекты в разные слои, скрывать их, а также контролировать отображение через камеры открывает широкие возможности для разработки как простых, так и сложных игр и приложений.