Игрок и "его вещи"

Сеть в Unity3D

Игрок и "его вещи"

Сообщение reimon245 28 янв 2012, 16:03

Добрый день, у меня в проекте игроки строят некоторые объекты,проблема в том,что когда игрок покидает сервер то все построенные им объекты уничтожаются вместе с игроком,мне нужно чтобы они оставались, я попробовал вместо просто Network.Instantiate сделать при нажатии кнопки строительства отправку рпц всем(RPCMODE.ALLBUFFERED) с которым передается NetworkViewID игрока( у него в инвентаре нужная вещь) и NetworkViewID вещи дочерней игроку на месте которой создается объект,в рпц я эти объекты по id нахожу и netwok.instantiate ,но несмотря на это проблема осталась...как решить данную тупиковую для меня ситуацию?
Как вариант я думал вместе Netwok.Instantiate в рпц сделать просто Instantiate чтобы у каждого создавались свои клоны,но! У меня как особенность - у каждого объекта есть network rigidbody который передается с сервера,чтобы у всех объектов в игре была одинаковая физика...вот как мне решить эту задачу теперь? Будьте добры подсказать?
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Игрок и "его вещи"

Сообщение Order 28 янв 2012, 20:22

Сделать авторитарный сервер..
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: Игрок и "его вещи"

Сообщение reimon245 29 янв 2012, 05:31

Попытался,нарыл немного информации в интернете,но теперь чуть другая проблема,если игрок сервер,то он может создавать объекты,а если клиент то нет...добавил дебаг лог после отправки рпц send при приеме рпц got... с клиента идет send с на сервер приходит got... вот код отправки рпц
Синтаксис:
Используется csharp
private void PlaceMaterial(){
        if(Network.isServer){PlaceMater(transform.networkView.viewID);}else if(Network.isClient){NetworkViewID nvp=transform.networkView.viewID;networkView.RPC("PlaceMater",RPCMode.Server,nvp);Debug.Log("RPC SEND");}}

А вот его приема и создания объекта( сделано так,т.к. в игроке хранится и позиция куда создавать объект и сам объект):
Синтаксис:
Используется csharp
[RPC]
        void PlaceMater(NetworkViewID nvp){
                Debug.Log("RPC GOT");
        foreach(GameObject _player in GameObject.FindObjectsOfType(typeof(GameObject))){
                        NetworkView _playerN=_player.GetComponent<NetworkView>();
                        if(_playerN!=null){
                        if(_player.networkView.viewID==nvp){
                        foreach (Transform child in _player.transform){
                        ChooseItem childC=child.GetComponent<ChooseItem>();
                        if(childC!=null){Inventory _playerI=_player.GetComponent<Inventory>();
                                                                Network.Instantiate(_playerI.invItem[paneltoolbarInt].placed,childC.transform.position,childC.transform.rotation,0);
                                                        }
                                                }
                                        }
                                }
                        }
                }

Помогите пожалуйста,почему сервер не хочет создавать объект? Ошибок нету вообще,даже той что не может найти объект с нужным id,чего я ожидал...но...
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Игрок и "его вещи"

Сообщение durak007 29 янв 2012, 05:42

Потому что сам скрипты пиши. В чужих скриптах даже проф не разберется
durak007
 

Re: Игрок и "его вещи"

Сообщение reimon245 29 янв 2012, 05:42

При смене на RPCMode.AllBuffered( или All) весь тот же код уже ведет себя нормально,клиент может создавать объекты,но при дисконнекте они вместе с ним исчезают)
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Игрок и "его вещи"

Сообщение reimon245 29 янв 2012, 05:44

durak007 эм тут все мое,самописное....
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54

Re: Игрок и "его вещи"

Сообщение durak007 29 янв 2012, 05:45

Значит я в них не разберусь.Тем более что я не проф. А какое отношение к дестрою игрока имеют объекты им созданные. Они ж не прописаны на дестрой. А что у рпс моде свойство сервер так это для сервера только. передача для всех идет только по свойству олл. А че за на причайлдиные объекты персонажу. Ясное дело причайлдиные удалятся. А зачем сохранять объекты удочеренные персонажу. Ты их отчайлдь. Типа он умер а лук его забрали? И что лук удочерен главному объекту? При чем отчайлдь по РПС, не иначе.
durak007
 

Re: Игрок и "его вещи"

Сообщение reimon245 29 янв 2012, 16:08

Решил проблему, просто передавал в рпц позицию объекта для появления и его имя
Синтаксис:
Используется csharp
[RPC]
        void PlaceMater(Quaternion placeRot,Vector3 placePos,string placeName){
                Network.Instantiate(Resources.Load("Prefabs/Materials/StoneBlock/"+placeName),placePos,placeRot,0);
        }


Скрипт вызова рпц
Синтаксис:
Используется csharp
        private void PlaceMaterial(){
                        foreach (Transform child in transform){
                        ChooseItem childC=child.GetComponent<ChooseItem>();
                        if(childC!=null){Quaternion placeRot = child.transform.rotation; Vector3 placePos = child.transform.position;string placeName=invItem[paneltoolbarInt].placed.name;
                if(Network.isServer){PlaceMater(placeRot,placePos,placeName);}
                else if(Network.isClient)networkView.RPC("PlaceMater",RPCMode.Server,placeRot,placePos,placeName);}}}


Может кому пригодится)
reimon245
UNIт
 
Сообщения: 72
Зарегистрирован: 22 ноя 2011, 07:54


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

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

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