在unity中,如何修复NetworkServer.connections的KeyNotFoundException?

问题描述 投票:0回答:1

代码:ErrorKeyNotFoundException: ErrorKeyNotFoundException: on NetworkServer.connections?

 void Update()

 {
     if (isServer)
     {

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

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

ErrorKeyNotFoundException: 给定的键在字典中不存在。System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) (at :0) PlayerManager.Update () (at AssetsScriptsPlayerManager.cs:504)

当我运行两个实例的构建,其中一个作为主机+客户端运行,另一个作为客户端运行时,我没有看到任何问题。它工作得很完美。它给我两个值作为输出。

当我只作为服务器运行时,什么都没有发生,但当我作为客户端运行另一个构建时,它就开始拍摄上述错误。

我试着逐行调试,但Visual Studio在调试时没有显示任何错误。

unity3d networking client-server multiplayer mirror
1个回答
0
投票

我想明白了。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());
        }

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.