Я работаю над мобильной игрой Unity, очень похожей на многопользовательскую версию Temple Run . Я наблюдаю колебания сетевой задержки (обычно 200-500 мс) из-за мобильной платформы.
Два персонажа игрока показаны бегущими по одному и тому же пути и должны выполнять простые действия (прыжок, скольжение, усиление и т. Д.), Чтобы пройти препятствия.
Когда сообщение приходит с опозданием, игра предполагает, что удаленный игрок преодолел препятствие. Обычно это работает хорошо, но в случае, если игрок убит препятствием, я хочу, чтобы удаленный игрок погиб на том же препятствии / позиции, что и местный игрок. Из-за задержек удаленный игрок, по-видимому, пересек препятствие еще до того, как пришло сообщение о его смерти.
Как я могу синхронизировать игроков?
Я попытался переместить удаленного игрока обратно в положение смерти локального игрока сразу же, как только пришло сообщение о смерти, визуально это выглядит неловко и может вызвать другие проблемы с синхронизацией.
источник
Чтобы дополнить ответ Анко, вы можете немного изменить свой игровой дизайн, добавив последствия неудачного препятствия после неудачи, например, неудачный прыжок приводит к приземлению в лужу грязи, которая дисквалифицирует игрока. Таким образом, другой игрок замечает неудачу, видя другое падение в грязи, в то время как проигравший игрок сразу же видит это.
Вот хороший пост в блоге об этой проблеме (это не так уж недавно, но довольно интересно): Управление временем и синхронизация Даррина Уэста .
источник
Для местного игрока так важно знать точную позицию смерти удаленного игрока? Допустим, удаленный игрок не смог перепрыгнуть через одно из ваших препятствий и поэтому умер.
Мертвый игрок сразу же увидит их смерть и продолжит путь с места происшествия. Здесь нет ничего волшебного.
Местный игрок (тот, кто еще жив и пинается) видел, как удаленный игрок успешно преодолевает препятствие. Появится уведомление о смерти. Удаленный игрок может споткнуться, упасть и медленно исчезнуть. В следующий раз, когда вы узнаете позицию удаленного игрока, игрок перейдет в эту точную позицию и снова начнет нормально работать. В такой ситуации игроки будут знать о задержке, но задержка будет представлена как игровой элемент (спотыкаясь), а не внезапно появляющиеся и исчезающие игроки.
Если скорость обоих игроков постоянна, траектория движения предопределена, и время, необходимое для восстановления после падения, известно, что вы можете полностью устранить исчезающую / исчезающую часть. Вообразите удаленного игрока, умирающего в одном из препятствий. Его локальное представление все еще работает, когда приходит уведомление. Игрок сразу же спотыкается. Им нужно время, чтобы встать и снова начать бежать. На самом деле, это занимает столько же времени, как если бы им показывали, что они умирали на препятствии. Таким образом, когда они снова работают и работают, как локальные, так и удаленные позиции синхронизируются.
источник