Как обеспечить успешную отправку RPC в Photon Unity?

Я строю многопользовательскую игру с использованием движка Photon и Unity3D. Я использую photonView.RPC для отправки данных и значений между клиентами. Но иногда из-за проблем с сетью отправленный RPC не выполнялся на клиентах.

Можно ли как-нибудь проверить от клиента (который отправил RPC), что RPC был успешно отправлен, если нет, то снова отправил RPC?

1 ответ

Решение

Концептуально, единственный способ сделать это -

А отправляет сообщение с кодом идентификации (скажем, "321321777")

А ждет подтверждения...

Б получает сообщение

Б отправляет сообщение "Я получил 321321777"

Это действительно все, что вы можете сделать. Обратите внимание, что это вводит понятие тайм-аута. Выше на самом деле больше похоже на это...

А отправляет сообщение с кодом идентификации (скажем, "321321777")

А ждет подтверждения...

Если нет подтверждения (скажем) через 0,5 секунды, отправьте его снова. Продолжай делать это.

Б получает сообщение. Этикетка 321321777

Б отправляет сообщение "Я получил 321321777"

Любые другие копии "321321777", полученные B, B игнорируют его. Но: если B получил несколько "321321777", B снова отправляет все больше и больше подтверждающих сообщений для "321321777"

Стоит отметить, что, как правило, "видеоигры не работают так". Обычно вы просто отправляете миллионы позиций (или что-то еще) в секунду, и если несколько пропущено - это не имеет значения.

Не забывайте также, что сеть Unity в любом случае делает "надежную отправку" для вас - и, вероятно, такая концепция существует в "PUN".

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