NetworkRigidbody и ALT TAB

Сеть в Unity3D

NetworkRigidbody и ALT TAB

Сообщение IDoNotExist 25 май 2011, 10:56

Здравствуйте товарищи, я делаю сетевой гоночный симулятор на стандартной юньковской сети, посмотрел Network example с официального сайта, нашел там скрипт NetworkRigidbody, теперь использую его чтобы синхронизировать ригидбоди Player'ов, все работает, все синхронизируется, но возникает следующая проблема:
Когда какой - либо Player разгоняется, а затем нажимает на клиенте Alt tab, то я вижу на сервере что на его NetworkView перестает выполняться OnSerializeNetworkView().
Так как в этом случае NetworkRigidbody начинает экстраполяцию ригидбоди, то на сервере я вижу что его машина продолжает двигаться.
Но как только он опять открывает клиентское окно, то так как на клиенте ригидбодя никуда не двигалась, она естественно сообщает серверу свою позицию, и на сервере я вижу как машина данного Player'а телепортируется на то место где он нажал Alt tab.

Ну собственно почему так происходит я понимаю, но вот как с этим бороться? Подскажите пожалуйста кто сталкивался и как решил.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: NetworkRigidbody и ALT TAB

Сообщение mentors 25 май 2011, 11:06

IDoNotExist писал(а):Здравствуйте товарищи, я делаю сетевой гоночный симулятор на стандартной юньковской сети, посмотрел Network example с официального сайта, нашел там скрипт NetworkRigidbody, теперь использую его чтобы синхронизировать ригидбоди Player'ов, все работает, все синхронизируется, но возникает следующая проблема:
Ну собственно почему так происходит я понимаю, но вот как с этим бороться?

Переписать скрипт NetworkRigidbody так, чтобы синхронизировать не только данные на сервере с клиентом, но и при разрыве подключения, или таймауте, запрашивать данные у сервера...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: NetworkRigidbody и ALT TAB

Сообщение IDoNotExist 25 май 2011, 17:15

mentors писал(а):Переписать скрипт NetworkRigidbody так, чтобы синхронизировать не только данные на сервере с клиентом, но и при разрыве подключения, или таймауте, запрашивать данные у сервера...


Ну хорошо, прежде чем запрашивать данные у сервера надо их гдето хранить, тоесть выходит надо создать GO, прикрепить к нему скрипт где будут храниться данные. Чтобы можно было запрашивать данные с клиентов к объекту должен быть прикреплен NetworkView это все понятно, но как клиенту запросить данные с этого GO? Насколько я знаю RPC() не возвращает значение, или я ошибаюсь? А если синхронизировать эти GO с помощью OnSerializeNetworkView() то как мне сделать так чтобы данные синхронизировались на основе значения взятого с сервера?
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: NetworkRigidbody и ALT TAB

Сообщение mentors 25 май 2011, 18:11

IDoNotExist писал(а):
mentors писал(а):Переписать скрипт NetworkRigidbody так, чтобы синхронизировать не только данные на сервере с клиентом, но и при разрыве подключения, или таймауте, запрашивать данные у сервера...


Ну хорошо, прежде чем запрашивать данные у сервера надо их гдето хранить, тоесть выходит надо создать GO, прикрепить к нему скрипт где будут храниться данные. Чтобы можно было запрашивать данные с клиентов к объекту должен быть прикреплен NetworkView это все понятно, но как клиенту запросить данные с этого GO? Насколько я знаю RPC() не возвращает значение, или я ошибаюсь? А если синхронизировать эти GO с помощью OnSerializeNetworkView() то как мне сделать так чтобы данные синхронизировались на основе значения взятого с сервера?

Насколько я понимаю, читать можно из BitStream, он полностью передает от сервера к клиенту и обратно Network.OnSerializeNetworkView, и то что пишется и то что читается...
Аватара пользователя
mentors
UNITрон
 
Сообщения: 309
Зарегистрирован: 20 мар 2011, 19:32
Откуда: Россия

Re: NetworkRigidbody и ALT TAB

Сообщение IDoNotExist 26 май 2011, 06:51

mentors писал(а):Насколько я понимаю, читать можно из BitStream, он полностью передает от сервера к клиенту и обратно Network.OnSerializeNetworkView, и то что пишется и то что читается...


Читать из BitStream можно и нужно (stream.isReading) но прежде чем из него читать туда нужно чтото записать (stream.isWriting), так вот, как сделать так чтобы писать в поток мог только сервер? От чего это зависит? Насколько я понимаю это зависит от того кто клонировал объект (Network.Instantiate()), тоесть если его клонировал клиент с какимнибудь id = 1, то туда сможет писать только он, все остальные клиенты будут его только читать. Я правильно понимаю или нет? Кто на эту тему более просвещен просветите меня пожалуйсто.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: NetworkRigidbody и ALT TAB

Сообщение goodwin 29 май 2011, 12:39

может
Синтаксис:
Используется javascript
if(Network.isServer){
 
Изображение
FenceRoadCreator v2.0 - ограждения для дороги? легко!
Аватара пользователя
goodwin
UNIт
 
Сообщения: 62
Зарегистрирован: 29 апр 2011, 22:22

Re: NetworkRigidbody и ALT TAB

Сообщение IDoNotExist 30 май 2011, 13:39

Короче нашел самый простой способ решить проблему с Alt Tab - это включить опцию Run in background в меню Edit → Project settings → Player перед сборкой проекта, тогда пакеты будут отправляться на сервер с клиента и обратно даже когда приложение свернуто или другое окно активно.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: NetworkRigidbody и ALT TAB

Сообщение goodwin 06 июн 2011, 12:51

гхм... я думал что уже включена эта опция ... без этой опции на 1 компьютере сеть не проверишь.
Изображение
FenceRoadCreator v2.0 - ограждения для дороги? легко!
Аватара пользователя
goodwin
UNIт
 
Сообщения: 62
Зарегистрирован: 29 апр 2011, 22:22


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

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

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