实施网络平滑


13

我们正在制作倍增的第一人称射击游戏。客户端将其位置以固定速率(当前为10Hz)发送到服务器。服务器以相同的速率(10Hz)向所有玩家发送一条包含所有玩家位置的消息。

不出所料,由于60fps游戏每秒仅接收10次更新,因此动作非常不稳定。平滑此运动的最佳方法是什么?最明显的方法是在最后两个数据包之间进行插值,以便在收到新数据包时完成插值。但这会为所有播放器增加100ms的即时延迟。

另一种方法是使用从最近几个数据包推断出的速度和加速度来预测玩家在下一个数据包到达之前的位置,但是,如果预测错误,则玩家会在收到新数据包后立即跳起来。

有谁知道AAA标题如何解决这个问题?

Answers:


9

它们完全按照您刚才所说的去做-这两种方法之一,或者它们之间有些妥协。(例如,接受较小的延迟并在可能的情况下进行插值,并在ping超过该延迟时进行插值。)通常,在错误的预测之间进行某种插值操作,而不是跳回(也称为“捕捉”)回到正确的位置和校正后的值,如果可能的话,将其平滑。您还可以处理过去的更正,以减少所需的更正量。

这是一个常见问题,如果您进行搜索,可能会在gamedev.stackexchange.com的其他位置找到几个规范链接,其中包括以下内容:

每个程序员需要了解的有关游戏网络的知识(本文总结了以下两个链接中的内容)

源多人网络

虚幻的网络架构

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.