Как обеспечить успешную отправку 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".