Network rigidbody synchronization

Сеть в Unity3D

Network rigidbody synchronization

Сообщение reimon245 20 янв 2012, 09:04

Добрый день,суть проблемы в том что каждый игрок видит разное поведение одних и тех же rigidbody объектов у себя на экране.Как решить данную проблему и синхронизировать их? Я попытался навесить стандартных network rigidbody из уроков m2h но ситуация не поменялась.Подскажите пожалуйста как сделать чтобы все игроки видели идентичное поведение rigidbody объектов. Заранее благодарен.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Network rigidbody synchronization

Сообщение Груберк 20 янв 2012, 09:21

Предполагаю что никак, т.к. физика у каждого считается по своему.
Помню особенно смешно было играть в SWAT 4, там по геймплейные особенности повесили на стандартную физику. А при сетевой игре выходило, что автомат террориста для прохождения миссии у меня лежит на одном месте, а у друга улетел в противоположную часть комнаты. :)

Как вариант можешь считать физику на сервере и рассылать результат клиентам, но если у тебя rigidbody на каждом кирпичике висит, то боюсь, что лаги сведут всю твою реалистичность на нет.
Груберк
UNIт
 
Сообщения: 133
Зарегистрирован: 05 июл 2011, 13:26

Re: Network rigidbody synchronization

Сообщение reimon245 20 янв 2012, 09:46

Решил данную проблему довольно легко,думаю кому-то будет полезно :
Синтаксис:
Используется csharp
        if(Network.isClient){
                        foreach(GameObject _smth in GameObject.FindObjectsOfType(typeof(GameObject))){
                                Destroy(_smth.rigidbody);
                        }
                }

Вышеописанную функцию засунул в апдейт, и каждый клиент у себя удаляет риджидбоди у всех объектов,а сервер соответственно нет. Учитывая что на каждом из объектов с риджидбоди висит Network Rigidbody как я писал выше, то все работает ок)
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Network rigidbody synchronization

Сообщение Груберк 20 янв 2012, 10:12

Ну по сути то что я и говорил, только баловаться с этим сильно не стоит, т.к. с ростом расчета физики на сервере будет расти и траффик.

Вышеописанную функцию засунул в апдейт, и каждый клиент у себя удаляет риджидбоди у всех объектов,а сервер соответственно нет. Учитывая что на каждом из объектов с риджидбоди висит Network Rigidbody как я писал выше, то все работает ок)

а при старте проверить, клиент это ли и если да, то отключить/удалить компонент? Зачем это по сто раз в секунду делать?
Груберк
UNIт
 
Сообщения: 133
Зарегистрирован: 05 июл 2011, 13:26

Re: Network rigidbody synchronization

Сообщение reimon245 21 янв 2012, 08:43

Так как у меня по ходу игры создаются новые игровые объекты.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Network rigidbody synchronization

Сообщение Груберк 21 янв 2012, 09:46

функция Start() вызывается при создании объекта класса из скрипта -> создании GameObject
Груберк
UNIт
 
Сообщения: 133
Зарегистрирован: 05 июл 2011, 13:26

Re: Network rigidbody synchronization

Сообщение reimon245 22 янв 2012, 07:11

Груберк спасибо ! Вы натолкнули меня на отличную фишку о которой я уже забыл! Теперь и волки сыты и овцы целы, в скрипт игрока добавил маленькую команду:
Синтаксис:
Используется csharp
void Awake(){   if(Network.isClient){
                        foreach(GameObject _smth in GameObject.FindObjectsOfType(typeof(GameObject))){
                                Destroy(_smth.rigidbody);}}}

И теперь все ок) Теперь эта проверка включается лишь при создании новых объектов и удаляет у них риджидбоди и остается только network rigidbody.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54


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

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

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


cron