Игра в стиле RTS с предсказанием на стороне клиента - PullRequest
0 голосов
/ 26 сентября 2018

Итак, я сейчас работаю над многопользовательской игрой в стиле RTS.Подразделения не контролируются игроками (они атакуют-перемещаются в локацию автоматически).

Я решил не идти полным ходом, а вместо этого сделать гибрид на основе состояния / прогнозирования.Игра полностью моделируется на клиенте с пакетом состояний для каждого юнита, распределяемого только один раз в секунду (позиция, здоровье и т. Д.).Я читал, что в наши дни это довольно распространенный метод ведения дел, но у меня с ним серьезные проблемы.Одна очевидная проблема связана с синхронизацией здоровья.Ущерб наносится локально на каждом клиентском компьютере и исправляется с помощью пакета состояний.Это приводит к проблемам, подобным этому:

  • Снаряд поражает юнит на клиентском компьютере, снижая его здоровье от 100 до 50.
  • Клиент только тогда получает пакет состояния отСервер говорит, что у него 100 единиц здоровья, что приводит к его восстановлению.

Конечно, он получит еще один корректирующий пакет позже, когда он вернется к 50, но это вызывает действительно плохие визуальные всплески.Эта проблема становится еще хуже, если учесть влияние урона от способностей и тому подобное.

Полностью ли я неправильно понял, что требуется для создания игры, предсказываемой клиентом, или мне просто нужно обработать каждую переменную в каждом конкретном случае?основа?(IE вставляй глупые хаки, чтобы здоровье не выглядело плохо).

1 Ответ

0 голосов
/ 27 сентября 2018

Я бы опубликовал это на Game Dev , так как это в первую очередь "что я могу сделать?"вопрос, но здесь все в порядке, поскольку есть некоторые технические аспекты.

Что касается вашей проблемы, то я бы сделал следующее:

Не позволяйте предсказательному симу клиента фактически наносить урон юнитам..

Или, если вы это сделаете, получите урон от 1/4 до 1/10 от того, что он есть на самом деле, и визуально отобразите значение, равное Math.min(Math.max(sim_hp, 5%), last_packet_hp), которое предотвращает скачки вверх, но позволяет серверу исправитьвниз (и прогнозируемый ущерб клиента действует как визуально приятная «анимация» между последним и текущим значениями).Клиенту также не разрешается снижать HP подразделения ниже 5%, если он фактически не умирает на сервере.Любые несоответствия, наблюдаемые в этот момент, могут быть легко проигнорированы игроками (поскольку игроки хорошо знакомы с задержкой в ​​сети и потерей пакетов).

...