如何在游戏中处理丢弃的移动RPC数据包?

时间:2018-03-29 19:16:04

标签: networking rpc

我想知道如何在游戏中处理RPC数据包丢包。 例如,如果客户端正在向前移动,但在一段时间后开始向左移动,但由于数据包丢失导致strafe RPC(MovingLeft)丢失。 服务器仍会认为玩家正在向前移动,但客户预测会在按下“A”键后立即让玩家离开。

您是否应该让客户端在过去的一段时间内覆盖服务器权限?如果客户端正在修改服务器上的过去状态,这将如何影响服务器模拟?

1 个答案:

答案 0 :(得分:1)

大多数游戏都是这样做的,他们会在本地接受这些命令并将其呈现为服务器接收它们,然后由开发人员决定如何解决任何差异。

这是客户端向左移动的游戏中“橡皮筋”的主要原因,但随后角色模型会根据服务跳回“应该”的位置。

您可以考虑的其他事情不是简单地一次只用一个动作调用您的服务器,而是使用最新的3-5个动作来调用您的服务器,即时间戳,即。

  • 动作:前进[0 - 1秒] - >服务器已收到
  • 动作:向前[0-1秒],向左[1-2秒] - >丢包
  • 动作:前进[0-1秒],左[1-2秒],前[2 - 3秒] - >服务器已收到

您应该做的其他事情是不断更新您的服务器,无论是否执行了“新”操作:

  • 操作:转发[0 - 1秒]
  • 动作:前进[0 - 1秒],左[1 - 2秒]
  • 动作:向前[0 - 1秒],向左[1 - 3秒]