6

Разработка коллизий для мультиплеерной игры

Привет, пикабу! Давно не было постов о моей игре "We are vikings", а тем временем я сделал свой игровой движок с поддержкой мультиплеера и потихоньку буду рассказывать о нем и результатах. Сам мультиплеер ещё в разработке, попробывать его надеюсь можно будет через месяц-другой.

Чтож, о коллизиях!

(стоят в очереди за колбасой)

Итак, как работают коллизии в моей игре:

1. Сервер каждый тик обходит QuadTree (такая структура данных основнная на дереве позиций и "хитбоксов" юнитов) и ищет пересечения у прямоугольников. Если пересечение есть - можно рассчитывать коллизию (её может и не быть, если хитбокс это сложная фигура). В нашем случае всё просто - прямоугольники пересеклись - нужно разрешать коллизию.

2. Разрешение коллизии: для каждый прямоугольник "выталкивает" другой в направлении от своего центра.

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

4. Далее система отвечающая за передачу информации клиенту видит, что компонент типа "Толкать объект" изменился в этом тике - и сериализует (запаковывает) его в байтовый пакет для передачи по сети.

5. И в финале клиент слушает и безукоризненно применяет эти изменения в своей локальной системе, которая отвечает за позиции юнитов.

6. Система рендеринга считывает что в этот кадр позиция юнита поменялась - и перерисовывает его на экране в новом месте!

На этом все, а следить за релизами мой Hearthstone-like игры можно тут:

https://t.me/make_world

https://discord.gg/YtYa9ky33u

https://www.patreon.com/c/KonungzRage

Ну и небольшой бонус из ранней разработки коллизий)