Есть несколько вещей, которые вы можете сделать.
Вы можете централизовать все физические объекты на сервере и синхронизировать координаты с объектами игроков на всех клиентах. Это самый простой и работает без многих недостатков, однако он использует много ресурсов и требует большой полосы пропускания. Вы можете оптимизировать использование полосы пропускания, только отправляя значения игроку других игроков, которые находятся в пределах определенного радиуса.
Вы можете делать, как упомянул Ненстер, и сервер и клиенты имитируют физику, и каждый раз сервер исправляет клиентов. Это означает, что все клиенты рассчитывают свою физику для каждого игрока, и вы должны синхронизировать события нажатия клавиш на сервере, определяя траекторию каждого игрока на каждом клиенте. Каждые, скажем, 5 секунд сервер передает свое физическое моделирование, и все клиенты принимают изменения. Это может привести к небольшим смещениям, которые в большинстве случаев незаметны, но во время задержки в сети и потери пакетов (неизбежно при большом трафике UDP) вы заметите, что ваш игрок и / или другие игроки мерцают по экрану и меняют позицию быстро и быстро (если это слово?).
Вы можете заставить каждого клиента вычислять свою физику и синхронизировать его координаты. Это затрудняет моделирование физики на объектах, совместно используемых клиентами. Это довольно сложная концепция для реализации, если вы хотите сделать что-то притягательное, потому что определенный объект не обязательно принадлежит какому-либо клиенту.
Первый, вероятно, самый простой и должен позволить вам иметь 4-5 игроков с небольшим отставанием. Для каждого совпадения потребуется собственный сервер. Если вы проводите матчи по ЛВС, это ваш путь.
Второе, вероятно, наиболее практично, однако его может быть сложно реализовать. Также довольно изобретательно запускать симуляции физики на сервере. Если у вас есть централизованные серверы, вам, вероятно, потребуется балансировка нагрузки на несколько машин, возможно, разрешить 10 совпадений на сервере, загрузить новые совпадения на сервер с наименьшим количеством совпадений.
Третий, безусловно, наименее нагружает сервер и, вероятно, является лучшим решением, если вы используете схему одноранговой сети. Как я уже упоминал, может быть трудно синхронизировать объекты, отличные от вашего объекта player, потому что эти объекты могут изменяться и другими клиентами.
Я не могу сказать вам, какой использовать, потому что я не знаю, как работает ваша игра. Все, что я могу сделать, это дать вам факты. Если у вас есть какие-либо дополнительные вопросы, не стесняйтесь комментировать.