NetworkView и RPC

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

NetworkView и RPC

Сообщение Nubila 26 сен 2017, 00:11

Доброго времени суток. Пишу логику для мультиплеера через устаревшую систему. Почему устаревшую? Потому что Мастер Сервер работает при любом кол-во коннектов и прекрасно со всем справляется. Собственно проблема: Есть 2 сцены, первая - Автоматический поиск игры 1х1 , и в случае отсутствия таковой, хостится комната в которую другой игрок сможет законектится. И проблема в том, что игровые "персонажи" (в кол-ве 2шт) уже находятся во второй сцене. У каждого есть свой View и при создании хост занимает одного из них:
Синтаксис:
Используется csharp
 

   public void TakePerson()
    {
        move[] players = FindObjectsOfType<move>(); //запись всех возможных персонажей которых можно занять
        foreach(move M in players)
        {
            if(!M.isTaked)
            {
                View = GetComponent<NetworkView>();
                View.RPC("takePersonOnServer", RPCMode.AllBuffered, Network.AllocateViewID());
                break;
            }
        }

    }

    [RPC]
    private void takePersonOnServer(NetworkViewID ID)
    {
        View.viewID = ID;
        isTaked = true;
    }

И затем идёт спам таких ошибок:
View ID SceneID: 2 Level Prefix: 0 not found during lookup. Strange behaviour may occur
Could't invoke RPC function 'takePersonOnServer' because the networkView 'SceneID: 2 Level Prefix: 0' doesn't exist
View ID AllocatedID: 1 not found during lookup. Strange behaviour may occur
Received state update for view id' AllocatedID: 1' but the NetworkView doesn't exist

Подскажите пожалуйста , в чём проблема...
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье

Re: NetworkView и RPC

Сообщение Nubila 26 сен 2017, 17:27

Так, ну вообщем я допетрил в чём проблема. А именно в отсутствии объекта на клиенте с точно таким же ViewID(если запустить две идентичные сцены на разных клиентах с заранее созданными одинаковыми объектами, ViewID на каждом клиенте одного и того же объекта всё равно разный). Пришлось переделывать логику: Дождаться когда все клиенты законектятся и делать Network.Instantiate на каждом "своего" префаба с networkView и маленьким скриптом, так как сцена подготовлена заранее , то у готовых персонажей в ней есть свои индексы в скрипте, а в маленьком скрипте(которые были порождены каждым игроком) есть static index и при инициализации он увеличивается на 1 и сразу же в сцене ищет персонажа с сопоставимым индексом(тем самым как бы "занимая место"), и тут же networkVIew должен поменять observed на скрипт в своём персонаже в сцене.
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 15