Структура игрового движка

Приветствую разработчиков игр и движков. Начинаем цикл статей по структуре и описанию игрового движка. В большей степени будет разговор о мобильной версии движка.
Приветствую разработчиков игр и движков. Начинаем цикл статей по структуре и описанию игрового движка. В большей степени будет разговор о мобильной версии движка.

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

Game - это сама игра. В этот модуль входит не только код игры, но и ресурсы Есть разные варианты реализации этого модуля. Иногда язык написания игры совпадает с языком движка. К примеру движок написан на С++ и сама игра также написана на С++. В других случаях между модулем Game и движком появляется еще один слой-прослойка. Которая предоставляет другие варианты разработки. К примеру на языке Lua, CSharp и другие. Пример движки LOVE, Corona SDK - разработка игры реализуется на Lua, основной код движка скрыт и не доступен.

Engine API - это все то, с помощью чего можно работать с движком. Набор функций, классов и структур.

Core - ядро движка, тут происходит жизненный цикл игры. Это основной компонент, который связывает все остальные.

AI - искусственный интеллект, который может использоваться в игре. Это может быть часть движка, часть игры. В некоторых играх модуля может не быть или не использоваться.

Physic engine - физический движок. Это может быть как-то самописный или готовое решение. Среди используемых Box2D, Havok, Tokamak.

Resource manager - менеджер ресурсов. Довольно важный компонент движка. Позволяет работать с ресурсами - звуками, графикой и другими файлами. Позволяет оптимизировать работу с загрузкой и переиспользованием. К примеру нужно использовать в 10 разных местах один и тот же звук - мы будет хранить только 10 ссылок и один загруженный файл, вместо 10 выделенных блоков одних и тех же данных. При нехватке памяти, данные будет выгружены. И другие полезные функции по работе с ресурсами.

Graphics - модуль графики. Здесь у нас будет реализован рендер. Для разных систем будет разные API для графики. До недавнего времени это был OpenGL ES 2 (и просто OpenGL). Сейчас идет разделение графических подсистем. Для iOS\OSX это Metal, для остальных пока OpenGL, Vulkan.

Sound - звуковой модуль. Позволяет воспроизводить звуки и музыку. В качестве форматов используется несжатый wav и сжатый mp3 для музыки. Но все потребности может покрыть открытый формат Ogg. Это сжатый и открытый формат аудиофайлов. В качестве связующего звена выступает OpenAL или платформозависимые решения.

Network - по названию понятно, что работа модуля связана с сетью и обменом данных. Это может быть TCP\UDP пакеты и в виде готовый протоколов HTTP.

File system - работа с файловой системой. Каждый платформа имеет свои особенности работы с данными. Для многих платформ можно просто обратится к данным со стандартными функциями, в некоторых только с API платформы. К примеру при работе с файлами, которые хранятся в APK - необходимо использовать встроенные функции в NDK.

User interaction - это события от пользователя. Нажатие кнопок или движение и клик мыши. Этот модуль получает от пользователя события.

Platform - это уже целевая платформа на которой будет запускаться движок (игра): iOS, Android, Windows, Linux, OSX и возможно другие варианты. К сожалению Windows Phone уже рассматривать не стоит, хотя платформа была интересная. Каждый движок имеет разный баланс погружения в нативную реализацию. Некоторые движки максимально пытаются отделится от платформы и используют максимально узкую прослойку между системой и движком. Для примера если движок на С++, а платформа iOS - то используемый язык будет Objective C и чтобы реализовать к ним доступ нужно к нужным методам реализовать некоторую обвертку. Некоторые движки пишут большую часть реализации в нативном коде. Например вывод звуков реализована с помощью языка Java для платформы Android, а вызов происходит с помощью нескольких функций.

В следующий статьях мы рассмотрим отдельно модули движка.

5555
18 комментариев
15
Ответить

Комментарий недоступен

5
Ответить

Комментарий недоступен

7
Ответить

Комментарий недоступен

7
Ответить

Комментарий недоступен

5
Ответить

С одной стороны, возникает вопрос почему это в оффтопе, а не в геймдеве
С другой, полезность нулевая. Материал уровня "как нарисовать сову". Обычно такое на первых пяти страницах какой-нибудь 600-страничной книги про графику/движки как вводная глава идёт

2
Ответить