Миша пишет игровой движок

Description
Рассказываю о ходе разработки игрового движка, который я пишу в свободное от работы время.
Движок разрабатывается под веб на языке JavaScript.

Ссылка на проект: https://github.com/michailRemmele/remiz

Автор: @mremmele
Advertising
We recommend to visit
HAYZON
HAYZON
6.065.658 @hayzonn

لا اله الا الله محمد رسول الله

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 3 Wochen her

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 2 Wochen, 1 Tag her

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 Monat her

2 months, 1 week ago

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

С физикой все понятно. А что такое обнаружение коллизий и зачем это нужно? Вот есть у нас два объекта, и, допустим, они столкнулись. Их столкновение – это коллизия. Информацию о столкновении можно использовать для той же физики, чтобы персонаж в платформере не провалился сквозь землю и не падал бесконечно вниз или для игровых механик таких как стрельба башен в нашей последней игре, где при столкновении снаряда с мышью, снаряд уничтожался, а мышь получала урон.
Задача непростая, поскольку объектов может быть много, геометрия объекта может представлять собой многоугольник повернутый в пространстве да и помимо факта столкновения зачастую требуется дополнительная информация о точке контакта или вектора столкновения.

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

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

Я уже начал работать над улучшениями еще до Людума и далее планирую продолжать. Как минимум задачи следующие:
– возможность поворачивать коллайдеры
– поддержка угловой скорости, чтобы при столкновении объекты могли разворачиваться относительно точки приложенной силы
– ray casting. Это функция, позволяющая выпустить луч из заданной точки и получить список объектов-попаданий. Полезно для AI или стрельбы в шутерах
– упругие столкновения объектов и возможность передачи кинетической энергии
– пространственное разделение (spatial partitioning) чтобы оптимизировать количество попарных проверок. Может быть такие оптимизации в небольших играх и не понадобятся, но интересно разобраться, что это за зверь такой + хорошая возможность применить на практике сложные структуры данных

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

2 months, 1 week ago
Подведу итоги прошедшего джема. В целом …

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

К примеру, редактор не реагирует на пулл изменений из ветки и если другой разработчик трогал сцену и что-то менял, то запущенный редактор эти изменения перетрет. Из-за этого приходилось закрывать редактор каждый раз перед стягиванием изменений из мастера.

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

Шаблонный репозиторий для быстрого старта все еще полезная штука, но оказалось, что стартовая репа для новичка и для людума – это разные вещи. Часть первого дня я потратил на подключение систем и перенос кода, которые я уже писал для прошлых игр. Боевую систему взял для стрельбы башен, систему перемещения для мышей, да и спавн врагов волнами тоже был реализован несколько месяцев назад. Возможно для игровых джемов полезнее создавать максимально толстый репозиторий со всем, что может пригодиться. Хотя даже с тем, что было, получилось сделать игру, которая работает сразу на всех платформах при минимальных затратах на адаптацию верстки.

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

We recommend to visit
HAYZON
HAYZON
6.065.658 @hayzonn

لا اله الا الله محمد رسول الله

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 3 Wochen her

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 2 Wochen, 1 Tag her

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 Monat her