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?
Спасибо!