Корень сцены в PlayCanvas является базовым элементом, с которого начинается вся иерархия объектов в игровом мире. Этот объект играет ключевую роль в организации и управлении всеми сущностями в сцене, обеспечивая связь между объектами и их компонентами.
В PlayCanvas сцена представлена объектом типа pc.Scene,
который содержит в себе корень сцены. Корень сцены — это основной
объект, от которого начинаются все другие объекты в игровом мире. Он не
имеет явного визуального представления, но служит контейнером для других
объектов, которые могут быть расположены внутри него.
Корень сцены доступен через глобальный объект
pc.Application, который управляет жизненным циклом игры и
сцены. В частности, он хранит ссылку на текущую сцену, к которой можно
получить доступ через свойство application.scene.
Пример создания сцены и получения её корня:
var app = new pc.Application(document.getElementById('application'));
var scene = app.scene;
Дерево объектов сцены представляет собой иерархию, в которой каждый объект может быть дочерним элементом другого. Это позволяет создавать сложные структуры, где один объект может включать другие объекты, образуя иерархию. Корень сцены служит основным контейнером для всех объектов, но каждый объект может иметь свои дочерние объекты, что облегчает организацию и управление элементами сцены.
Объекты в PlayCanvas организуются в структуру дерева с помощью
компонента pc.Entity. Каждый объект сцены является
экземпляром класса pc.Entity, который может содержать
другие объекты как дочерние элементы.
Добавление объектов в сцену происходит через добавление их в корень
сцены или в другие объекты. Чтобы создать новый объект в сцене,
необходимо создать новый экземпляр pc.Entity, а затем
добавить его в нужное место в иерархии. Например, можно добавить объект
непосредственно в корень сцены:
var entity = new pc.Entity();
scene.root.addChild(entity);
Каждый объект может быть добавлен в другую сущность, создавая таким образом вложенные иерархии:
var parentEntity = new pc.Entity();
var childEntity = new pc.Entity();
parentEntity.addChild(childEntity);
В данном примере childEntity станет дочерним объектом
для parentEntity. Это значит, что при перемещении или
трансформации родительского объекта, дочерние объекты будут следовать за
ним. Иерархия объектов в PlayCanvas позволяет легко манипулировать
группами объектов и управлять их расположением, масштабированием и
вращением как единое целое.
Одной из важнейших функций иерархии объектов является управление их
трансформациями. В PlayCanvas каждый объект имеет компонент
pc.Transform, который управляет его положением, вращением и
масштабом относительно его родительского объекта.
Если объект добавлен как дочерний к другому, его трансформация будет зависеть от трансформации родительского объекта. Например, если родительский объект перемещается, все его дочерние объекты будут двигаться вместе с ним, но сохранят свои локальные позиции, вращения и масштабы.
Пример:
var parentEntity = new pc.Entity();
parentEntity.setPosition(10, 0, 0); // Устанавливаем позицию родительского объекта
var childEntity = new pc.Entity();
childEntity.setPosition(5, 0, 0); // Устанавливаем позицию дочернего объекта относительно родителя
parentEntity.addChild(childEntity);
В этом примере дочерний объект будет находиться на позиции
(15, 0, 0) в мировой системе координат, так как его позиция
(5, 0, 0) определяется относительно родителя, который
находится в точке (10, 0, 0).
PlayCanvas предоставляет несколько методов для работы с деревом объектов. Например, можно добавить или удалить объекты из сцены, перемещать их по иерархии или изменять их порядок.
Для добавления дочернего объекта используется метод
addChild(), а для его удаления —
removeChild():
parentEntity.removeChild(childEntity);
В этом случае childEntity будет удалён из иерархии и
больше не будет следовать за родителем.
Метод reorderChild() позволяет изменить порядок объектов
в родительской сущности. Это полезно для оптимизации рендеринга, а также
для управления визуальной иерархией объектов:
parentEntity.reorderChild(childEntity, 0); // Перемещаем дочерний объект в начало списка
В PlayCanvas также можно управлять активностью объектов с помощью
флага enabled. Этот флаг определяет, будет ли объект
участвовать в рендеринге, физике и других аспектах игры. Если объект не
активен, его компоненты не будут обновляться, и он не будет видим в
игре.
Пример:
childEntity.enabled = false; // Отключаем объект
Этот механизм позволяет временно выключать объекты, не удаляя их из сцены, что полезно для управления состоянием игры и оптимизации производительности.
Для того чтобы найти объект в дереве, можно использовать метод
findByName(), который позволяет получить объект по его
имени. Этот метод ищет объект по всему дереву и возвращает первый
найденный элемент.
Пример:
var foundEntity = scene.root.findByName('EntityName');
Если объект с таким именем существует в сцене, он будет найден и
возвращён. Если нет — метод вернёт null.
Организация объектов в иерархию предоставляет множество преимуществ. Она позволяет легко управлять групповыми трансформациями, позволяет быстро навигировать по объектам сцены и оптимизирует работу с компонентами. Иерархия также облегчает работу с физическими взаимодействиями между объектами, такими как коллизии и сцепления.
Однако стоит помнить, что слишком глубокие иерархии могут повлиять на производительность, особенно в больших проектах с множеством объектов. Также важно помнить о том, что сложные иерархии могут усложнить код, поэтому их использование должно быть обоснованным и оптимизированным.
Корень сцены и управление деревом объектов — это основа работы с PlayCanvas. Иерархическая структура объектов позволяет удобно организовывать и управлять элементами сцены, а также эффективно обрабатывать их трансформации и взаимодействия. С помощью PlayCanvas можно создавать сложные сцены с гибким контролем над расположением и состоянием объектов, что является важной частью разработки интерактивных 3D-приложений.