В единстве, как исправить KeyNotFoundException - на NetworkServer.connections? - PullRequest
0 голосов
/ 26 мая 2020

Код:

 void Update()

 {
     if (isServer)
     {

         for (var i = 0; i < NetworkServer.connections.Count; i++)
         {

             Debug.Log("Connections: " + NetworkServer.connections[i].identity.netId.ToString());
         }
     }
 }

Ошибка KeyNotFoundException: данный ключ отсутствует в словаре. System.Collections.Generi c .Dictionary`2 [TKey, TValue] .get_Item (ключ TKey) (в: 0) PlayerManager.Update () (в Assets / Scripts / PlayerManager.cs: 504)

Когда я запускаю два экземпляра сборки, один из которых работает как хост + клиент, а другой - как клиент, я не вижу здесь никаких проблем. Работает отлично. Он дает мне два значения в качестве вывода.

Когда я запускаю только как сервер, ничего не происходит, но как только я запускаю другую сборку как клиент, он начинает снимать указанную выше ошибку.

Я пробовал отладку построчно тоже, но Visual Studio не выдает ошибок при отладке.

1 Ответ

0 голосов
/ 26 мая 2020

Я разобрался. Словарь NetworkServer.Connection назначает ключ 0 для Host + Client. Но если сервер действует только как сервер, он не присваивает никакого значения ключу 0. Он начинается с 1 для всех клиентов. Следовательно, 0 будет использоваться только в том случае, если сервер действует и как хост, и как клиент.

Исправленный код:

void Update()
{
    if (isServer)
    {
        foreach (KeyValuePair<int,NetworkConnectionToClient> item in NetworkServer.connections)
        {
            Debug.Log("Connections--->:" + item.Key + "-->"+item.Value.identity.netId.ToString());
        }

    }
}
...