@OneTwoThreeFourFive

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

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

Сервер отправляет всем игрокам состояние игры, но все игроки получают ответы от сервера в разное время из-за пинга.

Как это оптимизировать?
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 2
@antonwx
Можно забить на эту проблему и попытаться решить её оптимальным расположением серверов для целевой аудитории (так делают, например, дота 2, вов)
Можно попытаться параллельно воспроизводить игровой процесс как на сервере, так и на клиенте, и синхронизировать (так делает, например, псо2, варфрейм)
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
Это очень сложная проблема, которую не решить в двух словах раз и навсегда. Поэтому ответ будет зависеть от особенностей игры. В общем случае - никак. Нет универсального рецепта.

Например, если это пошаговая игра, то пинг вообще не критичен и можно блокировать действия всех игроков, пока все не получат обновлённое состояние игры.

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

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

В общем, так или иначе это какие-то уступки, допущения, округления, предположения (предсказания траектории движения объекта), ограничения и т.д.

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

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

Войти через центр авторизации
Похожие вопросы