4.快节奏的多人游戏 (第四部分):延迟补偿

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25327609/article/details/88897876

英文原文地址 Fast-Paced Multiplayer (Part IV): Lag Compensation

能力有限,如有错误,请谅解,并欢迎指正!

介绍


前三篇文章解释了客户端 - 服务器游戏架构,可以总结如下:

  • 服务器从所有客户端获取带有时间戳的输入
  • 服务器处理输入并更新世界状态
  • 服务器将常规世界快照发送给所有客户端
  • 客户端发送输入并在本地模拟其效果
  • 客户获得世界更新和
    • 同步预测状态与权威状态
    • 插入其他实体的已知过去状态
      从玩家的角度来看,这有两个重要的后果:
  • 玩家在现在看到自己
  • 玩家看到的其他实体在过去
    这种情况通常很好,但对于非常时间和空间敏感的事件来说这是很成问题的; 例如,射击头部的敌人!

延迟补偿


所以你用你的狙击步枪完美地瞄准了目标的头部。你举枪就射 - 这是一个你不能错过的镜头。

但你错过了。

为什么会这样?

由于之前解释过的客户端 - 服务器架构,你在瞄准的是在敌人100ms前的头部- 而不是在你射击时!

在某种程度上,它就像在宇宙中玩耍,光速真的非常慢; 你瞄准敌人过去的位置,但是当你扣动扳机时他已经消失了。

幸运的是,有一个相对简单的解决方案,大多数时候这对大多数玩家来说也是令人愉快的(下面讨论了一个例外)。

以下是它的工作原理:

  • 射击时,客户端会将此事件发送给服务器,并提供完整信息:拍摄的确切时间戳以及武器的确切目标。
  • **这是至关重要的一步。**由于服务器获得带有时间戳的所有输入,因此它可以在过去的任何时刻以权威方式重建世界。特别是,它可以在任何时间点完全按照任何客户的样子重建世界。
  • 这意味着服务器可以在您拍摄的瞬间确切地知道武器瞄准器的内容。这是你敌人头部的过去位置,但服务器知道这是他头部在你现在的位置。
  • 服务器在该时间点处理镜头,并更新客户端。
    每个人都很开心!

服务器很高兴,因为他是服务器。他总是很开心。

你很高兴,因为你的目标是你的敌人的头部,射击,并得到一个漂亮的的爆头!

敌人可能是唯一一个不完全幸福的人。如果他在被击中时站着不动,这是他的错,对吧?如果他在动…哇,你是一个非常棒的狙击手。

但是,如果他处于空位,背后是一堵墙,然后在他认为自己安全的情况下,在几分之一秒后被枪杀了怎么办?

嗯,这可能发生。这是你做出的权衡。因为你过去向他射击,他在掩护后可能仍会被射杀几毫秒。

这有点不公平,但对于每个参与者来说,这是最合适的解决方案。错过一次不容错过的射门会更糟糕!

结论


这结束了我的快节奏多人游戏系列。这种事情显然很难做到正确,但是对于正在发生的事情有明确的概念性理解,这并不是非常困难。

虽然这些文章的读者都是游戏开发者,但它找到了另一组感兴趣的读者:游戏玩家!从游戏玩家的角度来看,了解为什么有些事情发生的方式也很有趣。

进一步阅读


尽管这些技术很聪明,但我不能对它们说任何功劳; 这些文章只是我从其他来源学到的一些概念的简单易懂的指南,包括文章和源代码,以及一些实验。
关于这个主题的最相关的文章是 What Every Programmer Needs to Know About Game NetworkingLatency Compensating Methods in Client/Server In-game Protocol Design and Optimization.

猜你喜欢

转载自blog.csdn.net/qq_25327609/article/details/88897876