我正在用c# sockets在Unity中编写多人游戏。我对套接字没有太多的经验,所以我遵循了一个教程来尝试把一些东西放在一起。
我的问题是玩家移动。移动是这样处理的(客户端权威):客户端每秒发送30次球员的位置到服务器,服务器存储每个球员的位置,并每秒发送30次其他人的位置,除了客户端自己的球员。所有这些都是通过UDP套接字处理的。
发生的情况是,每个客户端接收并更新位置,但是每隔~3秒,移动对本地连接来说就会延迟很多,就好像数据包以更慢的速度到达一样。然后在1秒后,它恢复正常,然后在3秒后,它再次这样做,以此类推。
这与我插入运动的方式无关,因为即使没有插值,它仍然是明显的。
这里有一个视频显示了这个问题,尽管我觉得你在这个视频中没有看到很多。位置是插值的,跳跃只是因为视频在以60fps录制时减慢了速度。
这是我在某种程度上遵循的教程。我从第1集到第5集跟随他的系列,但这是处理运动的视频。在他的视频中,它似乎没有做到我所经历的。
我也和我的朋友在网上试过,它非常慢,就像完全无法玩一样,所以我猜这是同样的问题。
From google
TCP是面向连接的协议,而UDP是无连接的协议。TCP的速度较慢,UDP的速度较慢快……TCP进行错误检查,也进行错误恢复另一方面,UDP执行错误检查,但丢弃错误包。
所以你的UDP在某个地方丢失了或者出现了错误,所以在那个帧没有更新。
不知道为什么它在本地连接这么糟糕,除非你使用wifi而不是以太网电缆。
我还建议使用像Socketweaver这样的东西,而不是编写低级代码,除非你的目标只是学习低级协议。