RPC проблема неизвестного происхождения...

Сеть в Unity3D

RPC проблема неизвестного происхождения...

Сообщение reimon245 28 янв 2012, 14:40

Помогите пожалуйста,есть мультиплэерный скрипт (уничтожения объекта) http://pastebin.com/XtvaV1uA,скомпилированный проект работает нормально без ошибок, а вот если с юнити коннектиться или создавать сервер,то при уничтожении объекта в вышеописанном скрипте пишет пару ошибок:

"View ID AllocatedID: 305 not found during lookup. Strange behaviour may occur"

"Could't invoke RPC function 'Destroy' because the networkView 'AllocatedID: 305' doesn't exist"

На всех объектах,что на уничтожителе что на уничтожаемом висят networkview.
305- Networkview номер объекта,при попытках уничтожения разных объектов эта цифра меняется..
Причем строчки на которые он ругается отсутствуют(просто нету,жму на ошибку кидает просто в mono develop).
Но при этом ЗАЯВЛЕННЫЙ DESTROY объекта происходит что в выдавшей ошибку юньке что в вэб плэере,и как я понял ошибка происходит после прохождения по RPC. Есть предположение что из-за foreach происходит зацикливание и он по 2ому кругу ищет этот уже уничтоженный объект и пишет ошибку...пытался втолкнуть break; но проблему не решило.....Так же пытался менять RPCMODE тоже ничего...
Все работает в итоге то,только в юнити при уничтожении любого объекта пишет такие вот 2 ошибки каждый раз,а уничтожений объектов у меня много...
Будьте добры помочь.
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: RPC проблема неизвестного происхождения...

Сообщение Good1101 28 янв 2012, 17:51

Не совсем понял суть цикла foreach а методе Destroy по моему было бы логичнее сделать так
Синтаксис:
Используется csharp
[RPC]
  void Destroy()
{
Destroy(gameObject)
}
 

Хотя возможно я что то не допонял.
И переименуйте метод Destroy так как в юнити уже есть свой дестрой и он может двояко читаться.
По поводу ошибки есть мнение что при if(curHealth==0) RPC метод срабатывает на всех клиентах, конечно если стоит синхронизация curHealth во всех клиентах и вы пытаетесь удалить объект который уже удален. Попробуйте использовать if(networkView.isMine) перед вызовом RPC.
Хотя возможно что ваш дестрой не удаляет объект и нетворк посылает какие то данные на клон обьекта а его уже нет...
Как тут стрелять?
Аватара пользователя
Good1101
Адепт
 
Сообщения: 1100
Зарегистрирован: 17 ноя 2011, 14:07
  • ICQ


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

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

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