Ответ: Вопросы от новичка
Привет всем!
Изучаю встроенную сеть в 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);
}
}
, то тогда новый подключенный клиент видит "убитый" объект. То есть, он создается, но не удаляется.
Тоже не то. Как тогда надо писать?
|