【问题标题】:How to handle dropped movement RPC packets in games?如何处理游戏中丢弃的移动 RPC 数据包?
【发布时间】:2018-09-08 20:26:46
【问题描述】:

我想知道在我的游戏中我应该如何处理 RPC 数据包的丢包。 例如,如果客户端正在向前移动,但一段时间后开始向左扫射,但扫射 RPC(MovingLeft) 由于丢包而被丢弃。 服务器仍然会认为玩家在前进,但是客户端预测会让玩家在按下'A'键后立即向左扫射。

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

【问题讨论】:

    标签: networking rpc


    【解决方案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 秒]

    【讨论】:

    • 即使没有新的操作发生,发送操作更新的副本是否会导致不必要的更高带宽速率?
    • 当然可以,但那真的有多少数据?您只是通过网络发送少量字节(加上 HTTPS 增加的任何开销)。
    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 2012-02-21
    • 2015-03-31
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多