Хотя этот метод может быть сложен для понимания и несомненно требует большого количества вычислительных ресурсов (по сравнению, например, с сетевым кодом Battlefield, который, по сути, работает интерполяцией «в прошедшем времени»), но обеспечивает очень эффективное управление своей техникой на клиенте и сервере при любом отклике.
Эффективность управления в игре может быть действительно очень высока, на уровне офлайнового одиночного режима, т.е. в режиме реального времени, но для этого должны быть соблюдены несколько условий, представленных ниже.
Стабильный отклик
Как следует из рассмотренного алгоритма, обе стороны, клиент и сервер, полагаются на своевременное получение определенной информации. И если отклик нестабилен, может возникать джиттер. То есть стабильный 100-миллисекундный отклик иногда лучше, чем «усредненные» 50 мс, если фактический разброс времени отклика составляет 10–110 мс. Конечно, игра знает точное время пакета, но визуально поведение при джиттере может быть будет более дерганным.
Приемлемый коэффициент потери пакетов
Именно поэтому лучше играть с проводным подключением, чем по Wi-Fi. Конечно, все данные передаются с определенной избыточностью. Но если будет полностью потеряно окно в 700 мс со всеми управляющими воздействиями клиента, переданными на сервер, они станут уже слишком устаревшими для их повторного применения.
Необходимо помнить, что клиент в игровом мире не один — есть и другие клиенты, которые должны «видеть» позиции остальных игроков и взаимодействовать с ними, поэтому повторное применение управляющих действий за последние, например, 10 секунд недопустимо. В результате произойдет заметная «телепортация» игрока как на сервере, так и на всех остальных клиентах. Однако, если потеря пакетов составляет 3-5%, никаких проблем возникать не должно.
Также следует учитывать, что игровая статистика по потерям пакетов не отражает всех потерь, испытываемых клиентом. Измерения в ней основаны только на «надежном трафике» (трафик с подтвержденной доставкой), поскольку в случае ненадежного трафика нельзя даже точно определить факт потери пакета. Но даже если потери в среднем составляют 5%, это не означает, что не могут быть утеряны, например, все пакеты с управляющими воздействиями (даже если они передаются с избыточностью).
Отсутствует взаимодействие с другими игроками
Разумеется, в игре такого быть не может. Однако большую часть времени (99,9%) никаких взаимодействий не происходит, а 99% всех взаимодействий составляет стрельба. Стрельба — отличный тип взаимодействия (с точки зрения сетевого кода и погружения в игру), поскольку большую часть времени она либо ни к чему не приводит (промахи и рикошеты), либо наносит реальные повреждения. Поэтому некоторая рассинхронизация выглядит приемлемо и не сказывается на погружении (например, в случае небольшой телепортации, если позиция смещалась еще в течение 100 мс после того, как уже 200 мс назад на траектории игрока было нанесено повреждение).
Комментарии 2