Задать вопрос
@historydev
Mistkerl, drück den Knopf.

Как работает физика в мультиплеер играх на клиенте?

У меня есть простейший пример, как мне кажется, это коллизии между примитивами:
67956a681f170151061780.png

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

В клиент-сервере, без доп. логики по идее можно было бы обойтись движением "до победного" на сервере, то есть если мы движемся в координаты (0.0, 0.0) мы ничего не проверяем и двигаемся до конца.
А на клиенте как раз проверяем пересекаются ли они и расталкиваем.

Но как только введётся дополнительная логика, например проверить пересекает ли окружность другую на сервере - мы в ловушке.
  • Вопрос задан
  • 268 просмотров
Подписаться 2 Средний 3 комментария
Решения вопроса 1
maaGames
@maaGames
Погроммирую программы
Данные отсылаются на сервер и там происходит расчёт по "реальным" данным от всех игроков. В это время локально происходит расчёт по данным на клиенте и быстренько рисуется, что получилось. Когда от сервера приходят реальные координаты объектов, то данные на клиенте перезаписыаются и отображаются реальные положения объектов. Если в расчётах на клиенте и на сервере возникают какие-то расхождения, то игрок будет видеть "дёрганья" объектов. Это же касается вообще всех действий, что бы на клиенте не было посчитано, пока сервер не подтвердит правильность вычислений, действие не будет принято (возникает всеми любимый инпут лаг).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@WhoMe
Например, техникой Deterministic Lockstep
Для этого нужно чтоб физический движок был детерминированный - т.е. в нем нет ничего случайного, при одинаковых начальных условиях и одном и том же вводе он бы выдавал одинаковый результат. По сети передается только пользовательский ввод.

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

https://gafferongames.com/categories/networked-physics/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы