在统一中,如何修复 KeyNotFoundException - on NetworkServer.connections?

In unity, How to fix KeyNotFoundException - 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());
         }
     }
 }

错误 KeyNotFoundException:字典中不存在给定的键。 System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey 键) (at :0) PlayerManager.Update () (at Assets/Scripts/PlayerManager.cs:504)

当我 运行 两个构建实例,其中一个 运行 作为主机+客户端,其他 运行 作为客户端时,我没有发现任何问题。它工作得很好。它给了我两个值作为输出。

当我 运行 仅作为服务器时,什么也没有发生,但是当我 运行 另一个构建作为客户端时,它开始出现上述错误。

我也试过逐行调试,但 Visual Studio 显示调试时没有错误。

我明白了。 NetworkServer.Connection 字典将键 0 分配给 Host+Client 但是如果服务器只作为服务器,它不会给key 0赋任何值,它对所有的clients都是从1开始的。因此,仅当服务器同时充当主机和客户端时才使用 0。

修改后的代码如下:

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

    }
}