Частота вызова RPC() в Update()

Сеть в Unity3D

Частота вызова RPC() в Update()

Сообщение IDoNotExist 26 май 2011, 13:43

Допустим я хочу сделать так чтобы у меня виртуальные оси (Input.GetAxis()) с клиентов отправлялись на сервер где созданы собственно сами Player'ы способа сделать это лучше чем через RPC() с параметром RPCMode.Server я не вижу, поэтому собственно возникл вопрос:
С какой частотой RPC() будет отправляться на сервер если я помещу её в Update() либо FIxedUpdate() где и буду ловить Input.GetAxis(), с той же частотой с которой вызываются эти функции? Либо с частотой которая установлена в Network.sendRate?

Либо посоветуйте есть ли альтернативный способ решения данной проблемы. Проблема в том что Player должен находиться именно на сервере, клиенты должны отправлять запрос на его перемещение и получать только его позицию.

В Networking tutorial данная ситуация не рассматривается, там насколько я понял везде Player'ы создаются именно на клиентах и уже сервер получает их позицию.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Частота вызова RPC() в Update()

Сообщение foonk 26 май 2011, 14:35

Посмотрите примеры от M2H, там, насколько я помню, рассматривается и такой вариант управления.
— 2010-й год. В Ладу Калину поставили первый Глонасс-приемник размером с утюг. В то же время Эппл выпускает плеер размером меньше спичечного коробка с цветным дисплеем и тачскрином.
Добавить foonk09 в Skype
Аватара пользователя
foonk
UNITрон
 
Сообщения: 302
Зарегистрирован: 16 май 2009, 20:25
Откуда: Москва
  • ICQ

Re: Частота вызова RPC() в Update()

Сообщение IDoNotExist 27 май 2011, 06:03

Спасибо! Посмотрел, как отсылать GetAxis() на сервер и получать позицию впринципе уже понял, но вопрос по экономии полосы пропускания при этом остается открытым.

Вот что нарыл по поводу RPC() в Update(), скрипт Tutorial_2A3.js, строка 21-27:
Синтаксис:
Используется csharp
//Save some network bandwidth; only send an rpc when the position has moved more than X
                if(Vector3.Distance(transform.position, lastPosition)>=0.05){
                        lastPosition=transform.position;
                       
                        //Send the position Vector3 over to the others; in this case all clients
                        networkView.RPC("SetPosition", RPCMode.Others, transform.position);
                }
 


Как видите в комменте автор написал что экономит полосу пропускания руками, уменьшая частоту вызова RPC(), с одной стороны да, действительно он её экономит, когда кубик стоит на месте RPC() не посылаются, но с другой стороны, если бы этого условия не было, то с какой частотой RPC() вызывались бы? Вопрос остается открытым.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Частота вызова RPC() в Update()

Сообщение foonk 27 май 2011, 08:06

Для этого, в NetworkView есть параметр State syncronization в котором
[*]Reliable Delta Compression - только отправляет значения наблюдаемого объекта в случае их изменения.
[*]Unreliable - Постоянно отправляет данные по сети, независимо от изменения данных.
[*]Off - данные не отправляются. (Требуется для отправки данных через RPC функции)
Соответственно, transform.position лучше всего отправлять при Reliable Delta Compression, что сэкономит трафик
— 2010-й год. В Ладу Калину поставили первый Глонасс-приемник размером с утюг. В то же время Эппл выпускает плеер размером меньше спичечного коробка с цветным дисплеем и тачскрином.
Добавить foonk09 в Skype
Аватара пользователя
foonk
UNITрон
 
Сообщения: 302
Зарегистрирован: 16 май 2009, 20:25
Откуда: Москва
  • ICQ

Re: Частота вызова RPC() в Update()

Сообщение gnoblin 27 май 2011, 14:13

здесь речь идет про частоту отправки RPC а не state sync
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Частота вызова RPC() в Update()

Сообщение foonk 27 май 2011, 22:05

В настройках Edit - Project settings - Network есть параметр Sendrate, по умочанию установлено значение 15, попробуйте поиграться с ним.
— 2010-й год. В Ладу Калину поставили первый Глонасс-приемник размером с утюг. В то же время Эппл выпускает плеер размером меньше спичечного коробка с цветным дисплеем и тачскрином.
Добавить foonk09 в Skype
Аватара пользователя
foonk
UNITрон
 
Сообщения: 302
Зарегистрирован: 16 май 2009, 20:25
Откуда: Москва
  • ICQ

Re: Частота вызова RPC() в Update()

Сообщение IDoNotExist 28 май 2011, 06:50

foonk писал(а):В настройках Edit - Project settings - Network есть параметр Sendrate, по умочанию установлено значение 15, попробуйте поиграться с ним.

Я в первом посте про sendRate написал, про это и был мой вопрос, ну да ладно думаю можно его закрыть, в M2H networking tutorial откопал еще кое чего: "Sendrate: определяет, сколько раз в секунду будут посылаться сообщения об изменениях наблюдаемых (observed в networkview) объектах. Это не влияет на сообщения RPC. Уменьшение значения приводит к экономии трафика (и снижению точности работы приложения)."
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Частота вызова RPC() в Update()

Сообщение gnoblin 28 май 2011, 09:49

интересно, спс!
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Частота вызова RPC() в Update()

Сообщение gnoblin 23 июл 2011, 11:52

Для таких целей было бы прикольно, если бы в юнити существовали unreliable rpc :-s.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3