Pull to refresh
85
0.1
Michael Panin @marsermd

Game Developer

Send message
А игроков с малым пингом старались отсеивать ещё до подключения к игре, в т.н. «комнате» и они играли с ботами, не подозревая об этом.

Я так понимаю, игроков с высоким пингом?
Сижу и смеюсь:D Жесткое решение:)

Да, эти правила писаны кровью)
Я бы посмотрел на эту идею в формате статьи, или, еще лучше, в формате демо версии:)
Если бы пинг был константым, я бы мог с вами согласиться. Но это уже давно обсужденная проблема благодаря Quake 3.
http://www.ra.is/unlagged/
«I don't have the most evil of Internet connections, but it really is sporadic sometimes. It's not unusual for my ping to fluctuate between 100 and 150, which does terrible things to my rail aim»
«У меня далеко не худший интернет, но иногда связь может дергаться. Мой пинг регулярно скачет между 100 и 150, что приводи к ужасным результатам для точности моего рейлгана»

Возможно для вас это и работает, потому что у вас стабильный и возможно небольшой пинг. А еще скорее всего потому что вы стреляете из оружия с большой частотой выстрелов. А вот со снайперской винтовкой было бы сложнее, т.к. с ней важнее не промазать в данный конкретный момент.
Для стрелка это максимально реалистично. Лагокомпенсация применяется НЕ ТОЛЬКО когда враг забегает за угол. Большую часть времени игроки видят друг друга когда стреляют. И именно для этого и существует компенсация лага. Но этот неприятный случай — побочный эффект.
Без этого механизма чтобы убить человека, который бежит перпендикулярно направлению выстрела, надо стрелять на опережение.

А это удар по всему геймплею, а не частности в виде забегания за угол.
Смотрите в следующей статье)
Ответьте себе на один вопрос: «Если бы вы выстрелили прямиком в голову врагу, а вам бы не засчитали убийство, вы бы решили, что это ок, или что игра забагована?»

Я боюсь, что если вы и столь разумны, что способны это принять, большинство игроков — нет. Да и на баланс это плохо повлияет.

Задача разработчиков — дать максимальную иллюзию реальности. И максимально честные условия соревнования. Если ты прицелился в голову врагу и выстрелил, он должен умереть, т.к. иначе для игрока это будет выглядеть как баг.
Да, скорее всего банально нет механизма компенсации лагов.
Верно. Помните, что эти условные 100 мс складываются из:
  1. Задержки для интерполяции
  2. Пинга
  3. Времени ожидания апдейта сервера
Боюсь, вы забыли про пинг. Враг видит вашу позицию в прошлом скорее потому что у одного из вас пинг большой, а не потому что обновления редкие. 60 кадров в секунду в худшем случае оставляют задержку в 16 мс.
А средний пинг, я боюсь, сильно выше этого значения. Представим что с вами играет человек с пингом 50, а у вас пинг 20.
Он видит вашу позицию за 50/2+16+20/2 мс назад, т.е за 51 мс. После того как он нажмет на выстрел, до вас сигнал будет идти еще 60/2+16+20/2. Я тут взял 16 за задержку сигнала на сервере, хотя среднее время ожидария будет 8 мс а не 16.
Так вот, при таком раскладе от смены частоты сервера вы выигрываете 16 мс из 102.
Спасибо за интересные ссылки)
Мы писали на c#, собственно, тоже под юнити. Но код такого рода доводить до состояния, чтобы новичкам можно было сказать: «делайте так» — довольно долго. У нас была более простая задача — собрать рабочий прототип механик и осознать узкие места и проблемы мультиплеера.

Да, действительно описанное в данной статье есть у ФотонКлауда. И даже можно построить авторитарный сервер, правда запускаемый из-под юнити, хотя, как я понимаю, такое решение не поддерживается из коробки. И, на сколько я знаю, тема следующей статьи(компенсация лага) не поддерживается в Юнити.
Я бы посмотрел на тест двойным слепым методом, подтверждающим это утверждение.
Признаюсь честно, я не писал экстраполяцию. Впрочем, до недавнего времени я и интерполяцию не писал:)
Я так понимаю, тут есть определенные пункты, которые необходимо выполнять:
  • Экстрополяцию последнего снапшота ведем пока не получим обновление от сервера
  • Обновленную модель от сервера получаем не сразу, а интерполируем между текущим результатом и новым результатом экстраполяции
  • Ну и конечно если у вас в игре есть вторая производная(ускорение), надо её учитывать и экстраполировать не только позицию, но и скорость

Вам вроде как остался только последний пункт. В идеале экстраполировать надо учитывая физическую машину модели. Т.е. считая что ввод врага константный, применяете его пока не получите обновление.
Ну, ничего страшного значит. Рано или поздно дорастете. :)
Описываемое в данной серии статей абсолютно не зависит от инструмента. Более того, это не так уж и сложно в реализации.
Да, это замечательное видео и я его всем советую:)
Я имел в виду что я не умею отличать как простой игрок)
Я не чувствую разницы между 64 и 128 апдейтов в секунду.
там не синхронный тикрейт, в духе 22 up, 60 down.

Так оно и есть. Отсылаются команды в OverWatch 60 раз в секунду.
В том и дело что даже 20 FPS на сервере вместо 60 вызывает недовольство. Так что 10 скорее всего вызовут дичайшие взрывы протеста.

и поднимать его вплоть до 120 (как в CS:GO).
В csgo matchmaking тикрейт 64, в более адекватных местах 128.

Я решил «округлить» до 120 в целях сокращения информации. Хотя, признаться честно, я не умею с клиента отличать 128 FPS от 64.
Не понимаю за что вас заминусили. Если только за оценочный итог.

Вообще в самом начале статьи и написано, что проблемы идут от вполне реальных физических законов.

И в этом весь ужас. Надо создать иллюзию классической одновременности для людей, удаленных настолько, что для них бывает только одновременность из СТО.
Подскажите пожалуйста, как работают античит системы в таких играх? Ведь в стратегиях даже небольшое но постоянное изменение баланса может значительно изменить ход игры.

Information

Rating
3,082-nd
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity