我正在使用Unity 2018.3.14,并且已经创建了自己的TCP和UDP服务器。我使用TCP层发送的强度和重复性信息不多,例如简单的聊天或损坏。
我使用UDP连接发送诸如球员位置和旋转等消息。
基本上,当1个玩家移动时,我会将所有点对点移动产生的所有坐标(x,y,z)A
发送B
给所有其他连接的玩家。
这将导致发送大量消息。假设我连接了100个玩家,并且所有玩家同时运行。我相信这会淹没服务器。
所以我的问题是一个好主意发送所有坐标(X,Y,Z)从点在他的旅程到达了球员A
到一点B
,或者你可以建议更好的方法?
这可能是一篇非常重要的文章,我自己会遇到麻烦,我将与您分享我的知识。具体取决于您的游戏。
1)物理与增量同步
无需一次又一次地将位置发送给所有人,您可以发送发生的速度变化。例如,您按下键“ W”并向前移动,而不是不断发送位置,而是发送一条表示您正在移动的消息,例如,每个客户端将显示“我的速度为Vector3(0,0,10)”收到此消息将开始移动所述对象。当您松开“ W”键时,它将发送一条新消息“我的速度为Vector3(0,0,0)”,因此我基本上停止了。
您将不时地同步您的位置,只是要确保每个人都在正确的位置,但是没有什么比位置数据包泛滥的情况。
2)相对对象
在具有大地图或陌生房间和地理的游戏中,您只能向客户更新以下内容:
例如,您不需要将职位发送给相距甚远甚至可能不知道您的存在的人。
这可以大大减少您的访问量,尤其是当您有很多玩家分布在一个较大的区域时。
3)分组消息
根据您的实现,您每秒必须发送X条消息。这是位置更新,速度更新或您决定发送的任何内容。保持每个数据包最少。例子:
根据您的方法,此时可能会有很多优化。
根据您的游戏,其中一些可能不适合您。
有用的链接:
欲了解更多信息,请随时与我联系。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句