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

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

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


person Shayed Hasan Shohag    schedule 01.02.2016    source источник


Ответы (1)


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

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

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

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

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

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

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

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

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

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

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

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

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

Не забывайте также, что сеть Unity в любом случае ДЕЛАЕТ «надежную отправку» для вас — и, вероятно, в «PUN» есть такая концепция.

person Fattie    schedule 01.02.2016
comment
Спасибо за ваш ответ. PUN рекомендует использовать UDP между UDP и TCP в настройках соединения, а UDP надежен. Если соединение надежное, то есть ли шанс сбросить RPC? - person Shayed Hasan Shohag; 01.02.2016
comment
Обычно, когда говорят надежный в этом смысле, ДА, это означает, что он УЖЕ ДЕЛАЕТ все, что я описываю. Например, надежный режим в сети Unity делает именно это. Так что это ваш ответ! Пожалуйста, отметьте и перейдите к следующему вопросу! - person Fattie; 01.02.2016