Показать сообщение отдельно
Старый 22.01.2013, 17:25   #1104
cahekp
Разработчик
 
Аватар для cahekp
 
Регистрация: 14.12.2008
Адрес: Томск
Сообщений: 530
Написано 270 полезных сообщений
(для 883 пользователей)
Ответ: Вопросы от новичка

Привет всем!
Изучаю встроенную сеть в Unity3D. Возник тут очень мучающий меня вопрос.
Как правильно инстанцировать и удалять объект по сети?

Создаю сейчас объект так: networkView.RPC("Spawn", RPCMode.AllBuffered, AllocateViewID());
Удаляю так: networkView.RPC("Destroy", RPCMode.AllBuffered, viewID);
Тела функций:
[RPC]
void Spawn(NetworkViewID viewID) {
GameObject go = Instantiate(someObj, pos, rot) as GameObject;
go.networkView.viewID = viewID;
}

[RPC]
void Destroy(NetworkViewID viewID) {
Network.RemoveRPCs(viewID);
Network.Destroy(viewID);
}

Но! Это неправильно. Если делать так, то при вызове этой функции у клиента, сервер получает ошибки:
View ID AllocatedID: XXX not found during lookup. Strange behaviour may occur.
Couldn't destroy object because the associate network view was not found
Если же вызвать это на сервере, то такую же ошибку получит клиент.

Если же написать так:
void Destroy(NetworkViewID viewID) {
if (viewID.isMine) {
Network.RemoveRPCs(viewID);
Network.Destroy(viewID);
}
}
, то тогда новый подключенный клиент видит "убитый" объект. То есть, он создается, но не удаляется.

Тоже не то. Как тогда надо писать?
__________________
(Offline)
 
Ответить с цитированием