Я разрабатываю многопользовательскую игру с использованием сокетов, в которых игроки бегут с постоянной скоростью. Игроки могут только прыгать. Их движение имеет постоянную скорость, как показано ниже в FixedUpdate. (пробовал также обновить) На клиенте я запускаю врагов с задержкой 300 мс, чтобы получить информацию о прыжке до того, как они достигнут позиции прыжка.
// run
body.velocity = new Vector2(runSpeed, body.velocity.y);
// jump
body.velocity = new Vector2(body.velocity.x, jumpForce);
У меня есть две идеи синхронизировать их прыжок.
1) Когда игрок прыгает, я передаю точную позицию прыжка x, y другим клиентам. В другом игроке, когда я получаю информацию о прыжке врага, я ничего не делаю с ним, пока враг все еще находится за позицией прыжка. Когда он проходит или в точке прыжка, я внезапно перемещаю игрока в положение прыжка за 0,3 мс (чтобы иметь точную физику) и применяю прыжок на врага.
2) Я считаю каждый раз скорость, применяемую к игроку и каждому врагу. Когда прыгаю, я испускаю этот счет и на стороне другого игрока, когда у перепрыгнутого врага есть тот же счет, что и у его прыжка, я применяю прыжок.
Однако это мои идеи, даже когда физика работает иначе. Речь идет не о прыжке, у меня есть 2 компьютера, и я синхронизирую код и запускаю игру на обоих компьютерах, и я никогда не выполняю никаких действий пользователя. Я просто печатаю transform.position.x и transform.position.y на экран. Однако они разные, я думаю, что это является причиной моей проблемы с синхронизацией. У меня не может быть абсолютно одинаковой физики на разных компьютерах, но один и тот же исходный код. Пожалуйста, помогите.
На обеих картинках, представляющих игру на разных компьютерах, я никогда не касался кнопки