2016-02-01 3 views
0

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

Есть ли способ, который я могу проверить у клиента (который отправил RPC), который был отправлен RPC, если нет, то снова отправлен RPC?

ответ

2

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

А посылает сообщение с идентификационным кодом (скажем, «321321777»)

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

в получает messsage

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

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

А посылает сообщение с идентификационным кодом (скажем, «321321777»)

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

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

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

В посылает сообщение "Я получил 321321777"

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

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

Не забудьте также, что сеть Unity для вас всегда «надежная отправка» - и, вероятно, такая концепция в «PUN».

+0

Спасибо за ваш ответ. PUN рекомендует использовать UDP между UDP и TCP в настройках соединения, а UDP является надежным. Если соединение надежное, есть ли шанс сбросить RPC? –

+0

Обычно, когда они говорят «надежный» в этом смысле, ДА, это означает, что УЖЕ ДЕЛАЕТ все, что я описываю. Например, «надежный» режим в сети Unity делает именно это. Так вот твой ответ! Пожалуйста, отметьте галочкой и переходите к следующему вопросу! – Fattie