Найти тему

Игровой симулятор

Хотелось создать физический симулятор, где можно было бы в игровом виде создавать технику, а потом на ней кататься. Лего Техникс — расширенная версия, то есть. Без сурового и аккуратного пользования, какой был бы уместен с , например, Gazebo.

Вдохновлялся я симулятором, с которым умел пообщаться Airsim. Выглядел игровой процесс следующим образом: подключаешь к компьютеру микроконтроллер (sic!), на котором запущена соответствующая версия по, далее запускаешь симулятор, стандартную программу управления квадрокоптера, берёшь в руки джойстик (палку радости:)), можно летать. Звучит также громоздко, как и выглядит сам процесс. Там много чего не хватало: интересных уровней, разнообразных объектов или хотя бы возможности строить разнообразные объекты и тп.

Было бы круто иметь такую штуку
Было бы круто иметь такую штуку

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

Поэтому, интереса ради, решил спроектировать свой симулятор, как бы пафосно это не звучало.

Идея довольно проста: добавить к существующему какому нибудь физическому движку добавить редактор моделей и уровней.

Графический движок был выбран из двух классных движков unity и unreal engine. Первый вдохновлял удобным интерфейсом, множеством плагинов, языком СИ Шарп, но расстраивал нестабильной дорожной картой ( мы делаем DOTS, мы его забрасываем, мы его снова делаем), отсутствием крутой визуализации с нуля. Второй показывал всякие красоты прямо с нуля, прикольной экосистемой (бесплатные текстуры в удивительном качестве, например), но язык C++ сложнее в использовании, причём там нужно знать кучу нюансов, да и без Blueprint не обойтись, дополнительно сам редактор, субъективно, чуть менее удобен. В итоге остановился на unreal engine, но совершенно по другим фактам: все библиотеки физических движков были на c++ и не хотелось использовать разные языки при разработке, хайп вокруг unreal engine 5 был слишком огромный:)

Архитектура приложения

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

Персонально, планировалось несколько комплектов программного кода:

  • Некий мир, который все создаёт, но о котором ни один из компонентов не знает
  • Физический компонент, ответственный согласно своему названию. О нём известно будет только сценам
  • Хранилище данных, о котором известно практически всем компонентам, а оно знает только об объектах. Главный претендент на звание супер класса. Мешать этому будет незнание о физическом комплекте
  • Сцена, которая знает только о физическом компоненте и объектах, динамических и фактических
  • Компонент игрока, который заведует игровыми контроллерами
  • Компонент интерфейса пользователя, значение которого понятно из названия
Стартовая архитектура приложения
Стартовая архитектура приложения

Дополнительно можно отметить:

  • Файловый менеджер
  • Конвертер

Дальнейшая работа

Работу можно разделить на следующие этапы:

  • Создание интерфейса редактора объектов — он будет помогать создавать различные весёлые машинки, сохранять их, а потом гонять по уровням
  • Систему загрузки в игру трёхмерных моделей общепринятого формата, а не blueprint
  • Редактор уровней или генератор уровней, который скорее всего будет завязан всё-таки не родной для unreal engine формат
  • Игровой режим, ради которого все и создаётся

Полезные ссылки:

Как встроить физический движок в ue

Существующий и довольно мощный симулятор

Разработка Microsoft, с которым я игрался в начале

Описание как заставить определенный микроконтроллер работать в симулированной среде