многопользовательская сеть с физикой


12

Мне любопытно, как многопользовательские сети с физикой реализованы в гоночных играх. У нас есть физический мир с несколькими быстро движущимися транспортными средствами, управляемыми разными людьми. Допустим, у транспортных средств есть оружие, и они могут стрелять друг в друга (Twisted Metal, Vigilante v8)

Я беспокоюсь о попаданиях и столкновениях. Авторитетный сервер или лучшая альтернатива?

Ответы:


5

Обычно используется Сервер, хранящий состояние «истина», которое периодически передается Клиентам. Столкновения происходят независимо на клиентах и ​​серверах, при этом состояния клиентов оцениваются по предыдущим состояниям с использованием процесса, подобного тому, что обычно называют « мертвым расчетом» . Когда состояние Сервера достигает Клиента, при наличии различий Клиент выполняет переход из своего текущего состояния в состояние, только что полученное в основном посредством интерполяции.

Однако со многими объектами коллизии могут быть реальной проблемой, поэтому обычно делается так, чтобы симулированное время Клиентов немного отставало от симулированного времени Сервера, чтобы обеспечить различные дополнительные степени гибкости. Эта статья о сетевом коде Source Engine от Valve довольно объяснительна. Кроме того, если вы все еще не решили, какое сетевое промежуточное ПО / библиотеку использовать, я предлагаю вам взглянуть на RakNet и его компонент «ReplicaManager3» .


2

Есть несколько вещей, которые вы можете сделать.

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

  2. Вы можете делать, как упомянул Ненстер, и сервер и клиенты имитируют физику, и каждый раз сервер исправляет клиентов. Это означает, что все клиенты рассчитывают свою физику для каждого игрока, и вы должны синхронизировать события нажатия клавиш на сервере, определяя траекторию каждого игрока на каждом клиенте. Каждые, скажем, 5 секунд сервер передает свое физическое моделирование, и все клиенты принимают изменения. Это может привести к небольшим смещениям, которые в большинстве случаев незаметны, но во время задержки в сети и потери пакетов (неизбежно при большом трафике UDP) вы заметите, что ваш игрок и / или другие игроки мерцают по экрану и меняют позицию быстро и быстро (если это слово?).

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

Первый, вероятно, самый простой и должен позволить вам иметь 4-5 игроков с небольшим отставанием. Для каждого совпадения потребуется собственный сервер. Если вы проводите матчи по ЛВС, это ваш путь.

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

Третий, безусловно, наименее нагружает сервер и, вероятно, является лучшим решением, если вы используете схему одноранговой сети. Как я уже упоминал, может быть трудно синхронизировать объекты, отличные от вашего объекта player, потому что эти объекты могут изменяться и другими клиентами.

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


Вы предполагаете, что позволить клиентам заниматься физикой - приемлемое решение, но вы не относились к мошенничеству.
cubuspl42

@ cubuspl42 Для того, чтобы остаться в теме, я опустил детали. Я считаю целесообразным, чтобы ОП мог продолжить изучение решения, чтобы изучить потенциальные способы смягчения мошенничества.
tsturzl

один такой способ позволяет ограничить отклонение того, что предоставляет каждый клиент, порогом. Например, большинство клиентов говорят, что данный объект находится в позиции 5,8 или 6,9, но один сообщает 12,19 как координату, которая может выйти за пределы порога по сравнению с тем, насколько он отклоняется от других клиентов. Это только частичное решение, но большинство игр предлагают только частичные решения для мошенничества, поэтому, почему это все еще происходит. Это решение не означает, что они обманывают, но означает, что их расположение должно быть исправлено и будет казаться им запаздыванием.
tsturzl

Ну, я немного не согласен. Некоторые типы читов исправимы, некоторые нет. Например, по моему мнению, это плохой игровой дизайн, если можно сделать спидхак для конкурентоспособного онлайн-шутера. Или какой-то сумасшедший взлом, который позволяет вам летать по карте с помощью режима бога и бесконечных боеприпасов (я думаю, что это произошло в Crysis 1 в какой-то момент). Это поправимо, просто разработайте свою игру правильно. Такие вещи, как wallhack, почти невозможно исправить (это потребует огромных ресурсов от сервера). Aimbot практически нефиксируется. Ваше решение № 3 увеличивает риск этого худшего рода читов.
cubuspl42

@ cubuspl42 Я думаю, тебе не хватает представления о том, что такое пример. Вариант 3 может предотвратить проблему, о которой вы говорите. Как правило, у вас будет TCP, который разделяет скорость, а затем вы можете легко проверить скорость между клиентами и сформировать консенсус, вы также можете выполнить некоторую простую математику, чтобы определить, правдоподобны ли координаты из UDP, учитывая предоставленную скорость, предполагая, что ваши клиенты имеют синхронизированные часы (могут быть установлены при подключении от HW clock).
tsturzl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.