Хотелось создать физический симулятор, где можно было бы в игровом виде создавать технику, а потом на ней кататься. Лего Техникс — расширенная версия, то есть. Без сурового и аккуратного пользования, какой был бы уместен с , например, Gazebo.
Вдохновлялся я симулятором, с которым умел пообщаться Airsim. Выглядел игровой процесс следующим образом: подключаешь к компьютеру микроконтроллер (sic!), на котором запущена соответствующая версия по, далее запускаешь симулятор, стандартную программу управления квадрокоптера, берёшь в руки джойстик (палку радости:)), можно летать. Звучит также громоздко, как и выглядит сам процесс. Там много чего не хватало: интересных уровней, разнообразных объектов или хотя бы возможности строить разнообразные объекты и тп.
Но, как ни странно, процесс увлекал: казалось бы, некий физический движок и не очень удобное управление, никаких красочных взрывов, сложных спецэффектов, высокополигональных моделей и hd текстур, а интерес появлялся.
Поэтому, интереса ради, решил спроектировать свой симулятор, как бы пафосно это не звучало.
Идея довольно проста: добавить к существующему какому нибудь физическому движку добавить редактор моделей и уровней.
Графический движок был выбран из двух классных движков unity и unreal engine. Первый вдохновлял удобным интерфейсом, множеством плагинов, языком СИ Шарп, но расстраивал нестабильной дорожной картой ( мы делаем DOTS, мы его забрасываем, мы его снова делаем), отсутствием крутой визуализации с нуля. Второй показывал всякие красоты прямо с нуля, прикольной экосистемой (бесплатные текстуры в удивительном качестве, например), но язык C++ сложнее в использовании, причём там нужно знать кучу нюансов, да и без Blueprint не обойтись, дополнительно сам редактор, субъективно, чуть менее удобен. В итоге остановился на unreal engine, но совершенно по другим фактам: все библиотеки физических движков были на c++ и не хотелось использовать разные языки при разработке, хайп вокруг unreal engine 5 был слишком огромный:)
Архитектура приложения
Здесь и далее будут рассуждения напрямую не связанные с исходными кодом, а с скорее с организацией работы.
Персонально, планировалось несколько комплектов программного кода:
- Некий мир, который все создаёт, но о котором ни один из компонентов не знает
- Физический компонент, ответственный согласно своему названию. О нём известно будет только сценам
- Хранилище данных, о котором известно практически всем компонентам, а оно знает только об объектах. Главный претендент на звание супер класса. Мешать этому будет незнание о физическом комплекте
- Сцена, которая знает только о физическом компоненте и объектах, динамических и фактических
- Компонент игрока, который заведует игровыми контроллерами
- Компонент интерфейса пользователя, значение которого понятно из названия
Дополнительно можно отметить:
- Файловый менеджер
- Конвертер
Дальнейшая работа
Работу можно разделить на следующие этапы:
- Создание интерфейса редактора объектов — он будет помогать создавать различные весёлые машинки, сохранять их, а потом гонять по уровням
- Систему загрузки в игру трёхмерных моделей общепринятого формата, а не blueprint
- Редактор уровней или генератор уровней, который скорее всего будет завязан всё-таки не родной для unreal engine формат
- Игровой режим, ради которого все и создаётся
Полезные ссылки:
Как встроить физический движок в ue
Существующий и довольно мощный симулятор
Разработка Microsoft, с которым я игрался в начале
Описание как заставить определенный микроконтроллер работать в симулированной среде