You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity Netcode GetCurrentRtt传入LocalClientId报错的解决咨询

解决Unity Netcode GetCurrentRtt的KeyNotFoundException问题

问题根源

你调用GetCurrentRtt时传入的LocalClientId是客户端本地标识,并非服务器分配的连接ID,而NetworkTransport.GetCurrentRtt需要的是服务器侧维护的客户端连接ID作为键,两者没有固定对应关系,因此会出现找不到键的错误。临时将LocalClientId减1仅对首个用户有效,是因为首个用户的本地ID刚好和连接ID巧合匹配,但后续用户的标识对应关系会变化,导致方案失效。

正确解决方案

使用LocalClient.ConnectionId替代LocalClientId,这个值是服务器为当前客户端分配的有效连接ID,是GetCurrentRtt方法的正确参数:

private void Update()
{
    if(NetworkManager.Singleton != null && NetworkManager.Singleton.IsConnectedClient)
    {
        var localClient = NetworkManager.Singleton.LocalClient;
        if(localClient != null)
        {
            float pingInMilliseconds = NetworkManager.Singleton.NetworkConfig.NetworkTransport.GetCurrentRtt(localClient.ConnectionId);
            // 这里可以使用ping值做后续处理
        }
    }
}

额外说明

  • LocalClient在客户端成功连接服务器后才会被初始化,配合IsConnectedClient的判断可以避免空引用,但额外加一层空判断能提升代码健壮性。
  • 不要依赖LocalClientId和ConnectionId的数值对应关系,两者的生成逻辑完全独立,不同场景下可能出现不同的偏移或无规律的数值。

内容的提问来源于stack exchange,提问作者creeperQ7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:32:04