Мультиплеер Unity: разные устройства показывают разную физику даже без взаимодействия - PullRequest
0 голосов
/ 11 ноября 2019

Я разрабатываю многопользовательскую игру с использованием сокетов, в которых игроки бегут с постоянной скоростью. Игроки могут только прыгать. Их движение имеет постоянную скорость, как показано ниже в 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 на экран. Однако они разные, я думаю, что это является причиной моей проблемы с синхронизацией. У меня не может быть абсолютно одинаковой физики на разных компьютерах, но один и тот же исходный код. Пожалуйста, помогите.

На обеих картинках, представляющих игру на разных компьютерах, я никогда не касался кнопки

COMPUTER 1

COMPUTER 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...