Синхронизация networkView'ов

Сеть в Unity3D

Синхронизация networkView'ов

Сообщение WhiteDevil 13 мар 2011, 23:47

Преды! Не могу разобраться в сетевой идентификации.
Стоят у меня 2 танка: за одним сервер, за другим клиент. На танках висят по нетворкВьюшке. Сервер - редактор Юнити, клиент - закомпиленный билд. Задача в том, чтоб передать по сети идентификатор того, по ком игрок попал. Если один из сетевых приемников "узнает" о том, что в него попали, он сам себя взрывает.
Когда стреляю, вывожу вьюшку того, по ком попал, и передаю ее через RPC всем "остальным" вьюшкам. Кроме того, вывожу собственную вьюшку:

скрипт 1 (обработка выстрела и взрывов):
Синтаксис:
Используется javascript
print (hit.collider.gameObject.networkView.viewID);
print(transform.parent.parent.parent.gameObject.networkView.viewID);
                                               
SendMessage("ReceiveHitInfo", hit);

скрипт 2 (у мну тут сидят сетевые вызовы):
Синтаксис:
Используется csharp
void ReceiveHitInfo (RaycastHit hit) {
                               
        networkView.RPC("RemoteClientObject", RPCMode.Others,   hit.collider.networkView.viewID);
}

Тут же, функция-приемник:
скрипт 2:
Синтаксис:
Используется csharp
void RemoteClientObject(NetworkViewID nvid) {
               
        SendMessage("SendHitterInfo", nvid);   
        }

Соответствующая обработка:
скрипт 1:
Синтаксис:
Используется javascript
function SendHitterInfo(nvid : NetworkViewID) {

        print(nvid);
        print(transform.parent.parent.parent.gameObject.networkView.viewID);
}


Теперь тестим. По русски. Стреляем, пишим по кому попали, пишим собственный айди.
На стороне по ком попали: принимаем вью по ком попали, выводим этот вью, и выводим собственный вью.


Тестим. Миссия 1. Сервер стреляет по клиенту
150
1

Транскрипция: Айди по ком попали (по клиенту) - 150, собственная айди (сервера) - 1.

Миссия 2. Клиент стреляет по серверу. Сервер является приемником. Информация на сервере (в редакторе):
1
150

Транскрипция: айди по ком попали(по серверу) - 1, собственный айди (сервера) - 150.


Все немного запутано, сам часто не понимаю верно я думаю или нет. Написал много букв, спасибо если вы хотябы дочитали. Но мораль такова, что в "миссии 2" цифры должны быть одинаковые. Если я клиентом стреляю по серверу, и передаю айди сервера, при этом сервер является приемником информации, то сервер должен вывести - по ком попали (по серверу) и собственный (серверский). То есть 1,1.

Может быть проблема в том, что тест на локальной машине? Вьюшки ведь уникальные. От чего такая путаница? Или ткныте меня носом в мою лужу, которую я не вижу, пожалуйсто.
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Синхронизация networkView'ов

Сообщение theSILENT 13 июл 2011, 00:11

Возник такой вопросец: можно ли синхронизировать трансформ одного объекта с другим? Например мне нужно, как в
M2H_Network_tutorial - е, при подключении к серверу клиента спавнить на всех подключенных клиентах и на самом сервере их
"объекты",с этим понятно. Но для того кто коннектится мне нужно спавануть что то типа фпс контроллера, а для тех кто
просто будет видеть этого клиента - другой объект . Так вот как можно синхронизировать, скажем, трансформ фпс контроллера и
того "другого" объекта? И вообще , если кто может, объясните пожалуйста как юнити синхронизирует все эти вещи, т.е. как
определяет какой объект с каким синхронизировать? Заранее благодарствую). :)
Аватара пользователя
theSILENT
UNец
 
Сообщения: 44
Зарегистрирован: 30 ноя 2009, 20:36
Откуда: Россия, Крым, г. Ялта
  • Сайт

Re: Синхронизация networkView'ов

Сообщение foonk 13 июл 2011, 09:08

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

Re: Синхронизация networkView'ов

Сообщение theSILENT 13 июл 2011, 12:58

Всмысле вешать нужные компоненты? У меня есть два объекта на которых висит NetworkView как заставить их синхронизировать свои трансформы? (Я имеюввиду StateSynchronization)isMine это проверка на "владельца" , как мне это поможет?
Аватара пользователя
theSILENT
UNец
 
Сообщения: 44
Зарегистрирован: 30 ноя 2009, 20:36
Откуда: Россия, Крым, г. Ялта
  • Сайт

Re: Синхронизация networkView'ов

Сообщение foonk 13 июл 2011, 13:42

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

Re: Синхронизация networkView'ов

Сообщение theSILENT 13 июл 2011, 13:57

Насчет управления каждый своим объектом я понял. Вопрос немного в другом. Вот например в документации сказано что если инстансить объекты через Network.Instantiate то юня автоматически установит StateSynchronization между ними, но в таком случае получается что инстансятся одинаковые объекты, а мне нужно допустим, на всех клиентах, кроме того который присоединился, и сервере проспавнить один объект(например просто капсула которая наследует только позицию и вращение объекта того игрока , который приконнектился) , а самому игроку проспавнить фпс контроллер. Так вот если вручную буду спавнить игрков на каждом клиенте и выделять им ID то так можно синхронизировать, этот наш ФПС контроллер и "отображающий вас" объект? Или вы имели ввиду , при спавне на клиенте проверять :является ли он "виновником торжества ", т.е. он ли вызвал эту ф-цию, и спавнить свой префаб игрока?
Аватара пользователя
theSILENT
UNец
 
Сообщения: 44
Зарегистрирован: 30 ноя 2009, 20:36
Откуда: Россия, Крым, г. Ялта
  • Сайт

Re: Синхронизация networkView'ов

Сообщение foonk 13 июл 2011, 19:46

Или вы имели ввиду , при спавне на клиенте проверять :является ли он "виновником торжества ", т.е. он ли вызвал эту ф-цию, и спавнить свой префаб игрока?

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


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

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

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