Pull to refresh

Comments 6

Еще не хватает машины времени на серверной стороне.
Я конечно каску на стройке нашел, но как я помню но серверной стороне физика откатывается на ту временную ветку для которой получен пакет и он применяется для всей симуляции от того пакета до настоящего времени.
ту временную ветку

В основном в шутерах используется, для регистрации попаданий.
Синхронизируются клиенты и серверы по тикам, выставляется, как правило, 50-60 тиков игры (обновлений игрового мира) в секунду.
В пакете от клиента идет его текущий тик, сервер получая пакет, смотрит в хранилище состояний мира, находит нужный на тик клиента и делает проверку на попадание.
Дорогое удовольствие, хранят меньше секунды, т.к. 60 тиков это 60 полных состояний мира, обычно хранят 200-300 мс, это 20-30 тиков, поэтому многие удивляются, что при пинге больше 250-300 игры перестают обрабатывать их стрельбу и попадание.
Кстати, недавно юнитеки сделали разделение физических сцен, чтобы симулировать не все физические объекты, а только объекты в нужных сценах. Т.е. достаточно использовать PhysicsScene.Simulate для нужной сцены, а остальной мир будет симулироваться автоматически.
blogs.unity3d.com/ru/2018/11/12/physics-changes-in-unity-2018-3-beta
Это как? Перед вызовом PhysicsScene.Simulate надо ж отключать автосимуляцию физики, как она тогда будет автоматически симулироваться для остального мира?
Существует основной физический мир, который симулируется как и раньше. Там ничего не поменялось.
Но теперь при загрузке или создании сцен, можно указать параметр(LocalPhysicsMode), который позволяет создать отдельный физический мир, независимо от основного. Объекты в этом новом мире существуют отдельно от основного, т.е. шарик из новой сцены не будет взаимодействовать с основным миром.
Но есть нюансы:
  • Независимо от того, симулируем ли мы основной мир, у объектов/скриптов новой сцены будут вызываться FixedUpdate в такт с основным миром, с интервалом Time.fixedDeltaTime который указан в настройках
  • Во время вызова PhysicsScene.Simulate(float) не вызываются FixedUpdate у скриптов в этой сцене, однако вызываются события типа OnCollisionEnter
  • Не обязательно вызывать PhysicsScene.Simulate из FixedUpdate, можно из любого метода, напр из Update
  • Physics.Raycast не видит объекты в других физ. мирах, поэтому нужно использовать PhysicsScene.Raycast.
Сбой детерминированности это с новой версией physx из 2018.3 или до неё?
Sign up to leave a comment.

Articles