Страница 1 из 2

RPC, помогите рещить проблему с косяками после выстрелов..

СообщениеДобавлено: 23 окт 2012, 18:24
KorsaiR
Всем приветь!:) в кузне выкладывал свой проект "космическая мультиплеерная леталка".можете ознкомиться, полетать, весело там. Хотя версия уже обновилась (много сделал работы над графикой и т.п). Так вот. Недавно при тесте с друзьями выявил баг: игроки подсоеденяются нормально до тех пор, пока кто - то не выстрелит/убьётся об что - то/убьет другого. После чего то из этого списка - у того, кто пытается присоедениться тупо игра зависает.Причём во время этого зависания другие наблюдают кучу взрывов, создания вспышек(как от попадания снаряда в астероид например) и т.п. вообщем спавнится что -попало,но не новый игровозможно я напортачил с тем, что..как сказать..вообщем каждый выстрел,взрыв и т.п..все обьекты, которые создаются в игре(при выстреле или смерти допустим) создаются просто через Network.Instantiate.то есть я думаю нужно сделать, чтобы вместо обработки этого на клиенте, это обрабатывалось на сервере. то есть..блигн как бы обьяснить чтобы вас не запутать))
вообщем сейчас вот так:
Синтаксис:
Используется csharp
if(Input.GetMouseButton(0))if(timer <= 0){//если зажимаем лкм, если перерыв между выстрелами прошел
                                       
                                        Network.Instantiate(bull, spawning.position, camera.rotation,1);//спавним обьект "пуля" в точке спавна около пушки
                                       
               
                                       
                                        timer = 0.2f;//ну, и паузу снова ставим.
                                       
                                       
                                }
                       


но это вызывает у меня сомнения, а поскольку я пока что не очень разбираюсь именно в сетевом коде, то я вообще в заблуждении. Что можете подсказать?только не кидайте меня в справку пожалуйста, я там уже всё обсмотрел, и многому оттуда научился.но сейчас мне хочется именно услышать ваши отзывы.
З.Ы: кстати ребят, кому интересно- добавляемся вк! :) http://vk.com/korsair1997 помогу вам в скриптах(вам, всмысле я обращаюсь к новичкам), да и в моделировании довольно силён :)

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 18:50
Kayler
код на вид нормальный, этого мало честно говоря, пробовал уменьшить частоту инстанса?

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 19:07
KorsaiR
не от частоты зависит.вот я создаю сервак. ко мне подсоеденяются - всё ок. стоит кому - то выстрелить, и после этого у тех кто пытается подсоедениться игра виснет, а у тех, кто подсоеденился уже - игра норм работает.

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 19:09
KorsaiR
если хочешь можешь сам протестить - http://NF-studiogames.taba.ru/fid/ZmlsZ ... os(minimum).exe

создаешь сервак, подсоеденяешься сам к себе(вводишь свой ip), пробуешь пострелять и подсоеденяешься снова.)

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 19:22
Kayler
KorsaiR писал(а):если хочешь можешь сам протестить - http://NF-studiogames.taba.ru/fid/ZmlsZ ... os(minimum).exe

создаешь сервак, подсоеденяешься сам к себе(вводишь свой ip), пробуешь пострелять и подсоеденяешься снова.)

кхм.. не виснет

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 19:25
KorsaiR
тогда попробуй подсоедениться, убить один корабль и присоедениться)

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 19:28
Kayler
KorsaiR писал(а):тогда попробуй подсоедениться, убить один корабль и присоедениться)

все равно всё ок

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 19:33
Kann
KorsaiR писал(а):Причём во время этого зависания другие наблюдают кучу взрывов, создания вспышек(как от попадания снаряда в астероид например) и т.п. вообщем спавнится что -попало

скорей всего это происходит из за buffered RPC call. смотрите в своем коде как вы уничтожаете объекты, посмотрите как это реализовано в уроке M2N

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 19:40
KorsaiR
точно..вот про уничтожение возможно тема правильно зашла, они удаляются простым Destroy..раньше делал Network Destroy, но почему то из за этого происходили ошибки в дебаг окне..хотя и network view вроде на всех обьектах был..

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 19:47
Kann
у вас должно быть так
Синтаксис:
Используется csharp
 Network.RemoveRPCs(networkView.viewID);
        Network.Destroy(gameObject);

после каждого объекта созданным с помощью Network.Instantiate
и то не факт что будет все ок, раньше это глючило, хз поправили или нет, смотрите реализацию фикса в M2N

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 23 окт 2012, 20:28
KorsaiR
пасиб :) буду пробовать)

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 24 окт 2012, 07:33
KorsaiR
и всё равно игра виснет когда после выстрелов пытаюсь ещё подключить клиентов..скрипты ,где обьекты уничтожаются вот в таком виде:
Синтаксис:
Используется csharp
 public void OnCollisionEnter(Collision obj)//это скрипт снаряда. при столкновении с чем то

               

    {   Network.Instantiate(syst,transform.position,transform.rotation,0);//создается система частиц

                 Network.RemoveRPCs(networkView.viewID);

         Network.Destroy(gameObject);//сам снаряд уничтожается



               

               

               

        }

ещё пытался сделать так:
Синтаксис:
Используется csharp
void OnCollisionEnter(Collision obj){
         networkView.RPC("de", RPCMode.All, new Vector3());
}

[RPC]

        public void de(Vector3 location){

               

                Network.Instantiate(syst,transform.position,transform.rotation,0);

                Network.Destroy(gameObject);

               

        }



 

но результат один и тот же, игра виснет когда другие подсоеденяются после выстрелов..

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 24 окт 2012, 11:20
Kann
KorsaiR писал(а):но результат один и тот же, игра виснет когда другие подсоеденяются после выстрелов..

ну уничтожается в первом коде RPC вызовы от самого снаряда, а от системы частиц которую вы инстансите через Network.Instantiate где уничтожение ?
к тому же я писал, что раньше это глючило, и RemoveRPCs толком не работало, отсюда я вам и дал ссылку на урок от M2N там показанно как обойти эту проблему

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 25 окт 2012, 01:24
eligma
всё равно игра виснет когда после выстрелов

так это элементарно у тебя еще комп видать слабоватый. Грузяи сами префабы пуль их очень много получаются и все летят. делай например через 2 сек на префабе пули скрипт дестрой. такое у меня тоже в игре. щас все лучом делают а не пулями.

Re: RPC, выстрел(подскажите как сделать лучше..)

СообщениеДобавлено: 25 окт 2012, 12:44
KorsaiR
3.0 ghc x2, 4gb OЗУ (ddr3), Radeon 5700 series(ddr5). Не в компе дело,говорю ж, другие даже не могут подсоедениться