logo
Разрабокта расширения для игрового движка Unity

5.1 Реализация объектов

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

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

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

При прикреплении к объекту необходимого компонента, создаются четыре начальных точки. В окне редактора они соединяются гранями. При нажатии клавиши Ctrl на клавиатуре, пользователь может создать точку в любом месте одной из граней. Координаты этой вершины добавляются в лист, между соседними. Удаление точки происходит при помощи кнопки Backspace. Выделенные точки можно переносить тем же образом, что и стандартные объекты на сцене. Таким образом, создавая и располагая вершины, пользователь системы может задавать контуры освещаемого объекта. Если есть необходимость получить специальный эффект, необязательно делать контур идентичным действительной границе изображения. Используя координаты этих вершин, система рассчитывает карты теней от источников, что будет описано позднее.

Процесс задания геометрии для спрайта показан на Рис. 17. На первом шаге автоматически создаются четыре вершины (Рис. 17.1). После этого пользователь может добавлять и перемещать новые вершины (Рис. 17.2) до получения необходимого контура (Рис. 17.3).

Рис. 17 Формирование геометрии двухмерного объекта