Объекты и пространство сцены

Введение

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

В качестве основного варианта организации игровой сцены в Nau Engine используется система игровых объектов и компонентов. Каждый объект представляет собой сущность, реализующую определенную задачу в рамках игровой механики. Подход используется в большинстве современных инструментов разработки игр и позволяет гибко организовывать большие игровые миры.

Окна редактирования игровой сцены

Окна редактирования игровой сцены

В окне Структур (Outliner) можно увидеть структуру сцены с иерархией всех объектов сцены. Вы можете изменять её при помощи drag and drop, перенося объекты или вкладывая их для создания связей по типу родитель-потомок.

В окне Просмотра (Viewport) можно увидеть, как будут выглядеть объекты после запуска приложения.

В окне Инспектора (Inspector) можно увидеть все компоненты игрового объекта и их свойства (переменные).


Структура сцены

Все игровые объекты существуют в едином трехмерном пространстве сцены. Структура этих объектов отображается в виде древовидного списка в окне Структур (Outliner).

Игровые объекты имеют иерархическую организацию, то есть один игровой объект может быть вложен в другой, являясь его функциональной частью. Иерархия нескольких объектов может представлять собой более комплексную сущность, собранную из нескольких игровых объектов.

Каждый объект в сцене обладает данными о положении, вращении и масштабе относительно родительского объекта. Все модели, эффекты, источники света располагаются в пространстве сцены и могут группироваться через включение в другие объекты. Вы можете выбирать отдельные объекты и перемещать их в сцене через окно просмотра (Viewport).

Вложенность объектов

Вместе группы объектов могут составлять сложные структуры с множеством элементов. Например, это может быть большой корабль, включающий как детали корпуса, так и персонажей.

Основная идея иерархии — связь объектов через отношения «родитель-потомок».

Родительский объект: является «родителем» для одного или нескольких дочерних объектов. Трансформации (положение, поворот, масштаб) родительского объекта влияют на все его дочерние объекты.

Дочерний объект: связан с родительским объектом и наследует его трансформации. При этом дочерний объект может иметь собственные трансформации, которые применяются относительно родителя.

Пример:

Рассмотрим автомобиль как пример иерархии:

  • Кузов автомобиля: является корневым объектом, остальные части привязаны к нему.

  • Колеса, двери, фары: расположены относительно кузова. При перемещении кузова все эти элементы перемещаются вместе с ним.

  • Дверная ручка: ручка прикреплена к двери, но может двигаться для открытия замка, а значит может перемещаться в локальном пространстве относительно двери.

Изменять расположение объектов в иерархии можно при помощи перетаскивания объекта в нужное место древовидного списка.

Добавление объектов

Для создания нового игрового объекта в окне обозревателя необходимо нажать кнопку «Добавить» (+). В появившемся списке необходимо выбрать базовый шаблон объекта, на базе которого будет создан новый. Базовые шаблоны заранее подготовлены для основных типов и содержат объекты для отображения геометрии, визуальных эффектов, позиционирования аудио и прочее.

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

Управление иерархией

Настроить положение объекта в иерархии можно, перетаскивая объекты в списке. При таком перемещении объект сохраняет глобальное положение в мире, а его локальные координаты автоматически пересчитываются с учётом нового родительского объекта.

Объекты также можно удалять или дублировать. Копии объектов становятся самостоятельными экземплярами в рамках сцены, хоть и могут ссылаться на те же исходные данные, что и оригинал.


Отображение сцены

Все объекты сцены присутствуют в виртуальном пространстве и могут отображаться в окне обозревателя сцены (Viewport). Вы можете перемещаться в сцене с помощью виртуальной камеры редактора. Это системная камера, которая не присутствует в самой игре и нужна только для настройки сцены..

Примечание

Камеру редактора можно быстро перенести к выбранному объекту при помощи функции Фокус. Для того, чтобы сфокусировать камеру на объекте, можно нажать (F) или выбрать соответствующий пункт в контекстном меню объекта в окне Структур (Outliner).

С объектом в сцене можно взаимодействовать, выбирая инструменты на панели инструментов обозревателя или вызывая их при помощи горячих клавиш. Для большинства объектов доступны следующие инструменты:

../../_images/sobj_tools.png
  • Селектор (Q) – инструмент, позволяющий только выделять объекты.

  • Перемещение (W) – инструмент, позволяющий перемещать объекты.

  • Поворот (E) – инструмент, позволяющий вращать объекты.

  • Масштабирование (R) – инструмент, позволяющий уменьшать или увеличивать проекты.

Примечание

У некоторых объектов (например, камера) могут появляться уникальные гизмо для редактирования их специфических свойств.

При выборе инструмента на объекте появляется соответствующиея ему элементы контроля, облегчающая процесс редактирования.

../../_images/sobj_gizmos.png
../../_images/sobj_gizmos_b.png

Настройка объекта

../../_images/sobj_inspector.png

Каждый игровой объект состоит из одного главного компонента и может иметь дополнительные компоненты. Переменные этих компонентов позволяют настраивать каждый экземпляр компонента на отдельных объектах.

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

Изменение этих параметров позволяет точно настроить каждый объект для выполнения нужных задач. Все параметры объекта сгруппированы в компоненты объекта. Каждый объект выполняет определённую задачу в зависимости от своего назначения. В соответствии с общей системой игровых объектов Nau, первым в списке всегда отображается главный компонент объекта, который всегда имеет данные трансформации (положение объекта относительно его родителя).

Дополнительные компоненты могут, но не обязаны, иметь информацию о собственном положении относительно главного компонента.

Комбинируя набор компонентов игрового объекта и настраивая доступные параметры в компонентах, можно точно настроить роль и поведение объекта в сцене. Кроме стандартных компонентов, включенных в движок изначально, возможно добавление и собственных компонентов через добавление C++ классов. Подробнее о создании собственных компонентов можно прочитать в статье: Разработка игровой логики