Поведение энтитией в игре

1,990
18
105
Могу сказать, что я очень сильно что-то костылил с передачей позиции мобов, в особенности с обработкой posY, в итоге там совсем не майновская синхронизация, потому что были точно такие же проблемы с дёрганием сущностей, и это было связано с тем, как обрабатывалась позиция по сети. Ничего конкретнее сказать не могу, просто потому что уже не помню.

Если у тебя плавно летит граната в целом, но просто рассинхронивается, например, в моменты столкновения с чем-то ещё - тут могу только посоветовать удостовериться в том, что расчёты одинаковые на двух сторонах. Я, кстати, для гранат делал несколько странное решение - "guide entity", которая призрачна, но присутствует на клиенте, полностью управляется сервером и управляет основной сущностью (которая сама не синхронизирована с сервером), когда разница их позиций становится достаточно большой.
 
1,990
18
105
Это для сущностей, которые не синхронизируются, держу в курсе.
 
1,198
31
184
можно попробовать как конь посоветовал, навскидку прикинул в голове, должно работать
Лично у меня не синхронизируется, и вполне себе нормально живет, другие игроки видят как граната летит, отскакивает, etc.
 
1,198
31
184
объясни если дошло до тебя
я конечно не мастер обьяснений, но как я понял коня, то:
две сущности, призрак гранаты(как бы наводит основную гранату(призрак отскакивает так же как и сама основная гранта, наверно)0000))) и сама граната. При большом расстоянии между ними (блок-два), призрак корректирует позиции основной гранаты(может дает свои позиции, либо просто перемещает гранату к ней, тут хз)
Но смысл так делац, если у меня и без этого работает :/ Что кстати только сейчас привело к тому, что я не уверен, что у меня правильно работает эта тема. Но она работает
 
1,990
18
105
А какое должно быть правильное решение? Может есть какие-то статьи по этому вопросу?
Могу подкинуть вот это:
Там целая группа статей на эту тему.

Про призрак все просто - есть две сущности: основная, которую видно изначально, исключительно клиентская - и она симулируется локально. Параллельно есть невидимая сущность, которая синхронизируется с серваком, и как только клиентская сущность перестаёт считаться валидной (из-за достаточно большого рассинхрона позиций с синхронизируемой), та пропадает и вместо неё появляется призрачная. Хз, насколько это адекватно, просто одно из своего рода решений.
 
808
3
124
Даже если на движение проджектайла не влияют никакие факторы, которые могут различаться на клиенте и на сервере (читай "коллайдится только с блоками и при этом блоки никогда не могут поменяться в ненужный момент"), то все равно затруднительно надеяться на правильную синхронизацию когда клиент и сервер выполняют независимые расчеты. Проблема в том, что у сервера и клиента не синхронизированы тики, плюс сверху накладываются лаги сети. То есть все ломается, когда:
  • на сервере проседает тпс (граната на клиенте будет быстрее)
  • на клиенте проседает тпс (граната на клиенте будет медленнее)
  • возникают какие-то проблемы с сетью, из-за которых пакеты от сервера не доходят вовремя (тогда клиенту будет казаться, что граната рассинхронизировалась, хотя на самом деле все нормально).

Если возникнет любая из этих ситуаций и при этом есть какой-то костыль который возвращает гранату на место когда она слишком сильно рассинхронизировалась - он сработает, когда на самом деле единственное что рассинхронизировалось - это количество тиков, которое успело пройти. А вообще никогда не синхронизировать стремно, на практике вряд ли может быть такое что никакие внешние факторы не влияют (например, взрывы могут отталкивать, или еще что-то).

У меня опыта по-настоящему успешного решения проблемы нет, на сталкрафте работает как описал конь и иногда видны рывки на рассинхроне.
 
7,099
324
1,510
Проблема в том, что у сервера и клиента не синхронизированы тики, плюс сверху накладываются лаги сети
Из-за этого всего могут быть только искажения по времени(граната на клиенте решает, что ей нужно отскочить вправо быстрее, чем на сервере)
Но как это вызывает искажения по пространству?(граната на клиенте решила отскочить вправо, та же граната на сервере произвела те же вычисления, только чуть позже и решила отскочить влево)
В чем состоит разница, если исходные данные одинаковые?
Даже если проблема в попытках синхронизации позиции при рассинхроне тиков, то граната не должна после синхронизации решить, что ей в этот раз нужно отскочить в другую сторону, ведь ничего в ее траектории не поменялось, просто она приняла одно из предыдущих/следующих позиций
 
808
3
124
После синхронизации все будет нормально (если не забыть, что синхронизировать нужно не только позицию, а все им значения, влияющие на симуляцию), проблема в том что каждая такая синхронизация - видимый рывок.
 
Сверху