Обнаружение столкновений и реагирование в многопользовательских кадрах - PullRequest
0 голосов
/ 26 ноября 2018

Многопользовательский FPS.Простая физика.Игроки могут сталкиваться друг с другом и прыгать друг на друга - больше ничего.Они не могут толкать друг друга - просто блокируют путь.

Предположим, у нас есть 2 игрока - A и B. С точки зрения A его персонаж находится в режиме реального времени, а игрок B немного в прошлом из-заинтерполяция сущностей.Я знаю, что для правильной регистрации выстрелов мы должны реализовать компенсацию задержки, то есть перемотать время на сервере, чтобы восстановить то, что увидел игрок, когда нажал на курок.Но как насчет обнаружения столкновений и реагирования?Должны ли мы также перемотать время для этого?

Игрок А сталкивается с игроком Б. С машины А мы отправляем входные данные на сервер и запускаем предсказание на стороне клиента.Затем сервер получает сообщение, перематывает мир назад во времени, чтобы восстановить то, что видел игрок А, выполняет физическое моделирование.После этого мы получаем правильные данные о трансформации и физике для игрока А и можем отправить его ему, чтобы он мог выполнить коррекцию при необходимости.Но как насчет игрока B?Что с ним делать?Мы получаем данные о трансформации и физике для него, но это «прошлые» данные.Так что же делать с этими данными?Мы должны иметь его в текущем состоянии на сервере.Применить данные, а затем повторно применить прошлые данные, чтобы перенести его обратно в настоящее?Это кажется неправильным.Или, может быть, просто выбросить его и использовать все данные, которые были у нас на плеере B, прежде чем перематывать время?

Не могу обернуться вокруг этой задачи.Может быть, ничего даже не требуется делать, потому что сервер видит всех присутствующих, а это означает, что игроки A и B столкнутся на сервере до того, как A или B увидят его на своих машинах, поэтому разрешают конфликт «до того, как это произойдет» изперспективы клиентов.

Направьте меня в правильном направлении, пожалуйста.

...