Unity: Какая технология синхронизации состояний лучше?

Я реализую простую 2D-игру MMO в Unity.

Я хочу реализовать пользовательскую синхронизацию положения между сервером и клиентом. Какой подход вы бы предложили?

Мои две идеи подхода:

Первый:

альтернативный текст

Описание:

  • ClientA генерирует перемещение события. Дельта времени его движения равна 0 и отправляет это событие через сокет в качестве команды с локальной меткой времени начала движения (T1).
  • Сервер будет помнить и транслировать для каждого клиента на сцене об этом событии
  • ClientB получит событие ClientA в (T3) время и выполнит действие перемещения от dt (delta time) = T3-T1.

(мы также можем оценить T3 и T1 в кадрах или времени сервера).

Второй:

Описание:

  • Каждый раз мы будем транслировать для клиентов текущее состояние сцены
  • Состояние сцены рассчитывается на сервере или на клиенте (это не имеет значения)
  • ClientA отправит на сервер событие перемещения, а сервер получит его, запомнит и отправит другим клиентам.
  • ClientB получит синхронизированное состояние объекта ClientA и обновит их положение, используя текущее состояние движения объекта) и будет интерполировать это каждый раз.

Что ж. Вопрос... Какие плюсы и минусы этого решения я получу? И, возможно, у вас есть лучшее решение, чем я думаю.

Решение может быть на движке Unity, но должно быть более эффективным, чем я предполагал. Кроме того, какое решение использует Unity Networking и Photon с сервером Photon?

Спасибо!

0 ответов

Другие вопросы по тегам