Skip to content

Latest commit

 

History

History
37 lines (22 loc) · 7.2 KB

main.md

File metadata and controls

37 lines (22 loc) · 7.2 KB

Мотивация

Движок создается как профессиональный инструмент для разработки мобильных 2D игр. Его дизайн строится из двух ключевых направлений: скорость разработки и производительность.

Скорость разработки обеспечивается удобством API, редактором и скриптовым языком.

  • Удобное API означает что оно покрывает все необходимые кейсы разработчика, его легко понять и использовать. В нем минимум подводных камней, оно интуитивно понятно. Во многом ориентиром было внутреннее API движка Unity3D.
  • Редактор предоставляем весь необходимый функционал для разработки игр: сцена, ассеты, параметры, анимации, частицы. Он удобный и следует современным стандартам движокв с редакторами: Unity3D, Unreal Engine, Unigine, etc
  • Скриптовый язык упрощает написание игровой логики, делает API движка еще доступнее. В о2 для скриптов выбран JavaScript и TypeScript, т.к. это довольно распространенные языки, особенно среди Web разработчиков, у которых очень мало доступных игровых движков

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

Комбинация всех этих подходов обеспечивает эффективную разработку игр, быстрое прототипирование, при этом сохраняя высокую планку технического качества

Общая концепция движка

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

Сцена и ее ассеты настраиваются в редакторе. Код акторов, компонент и игры пишется на С++ или скриптовом языке (JS/TS).

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

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

Концепция интеграции о2 в другие движки

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

Есть два подхода: главенстрвующий и ведомый. В первом случае движок о2 оборачивает внутри себя другой движок, подчиняя себе его обработку инпута, обновление кадра и рендеринг. Это предпочтительный способ. Во втором случае все наоборот, о2 встраивается в игровой цикл другого движка.

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

Важно чтобы в другом движке использовалось то же render api, что и в o2. В крайнем случае возможна реализация подистсемы рендера под конкретную имплементацию в другом движке. Ведь по сути от нее нужен вывод мешей треугольников с текстурой и шейдером. Как правило в других движках этот функционал вынесен в отдельное API.

Документация