Lag即延迟,是多人游戏中常会出现的一个现象。lag compensation即延迟补偿,是一种减少延迟对游戏造成影响的技术。
Ping
多个含义
- 一种指令(用于验证ip地址是否存在或者主机是否正在运行)
- 描述服务器需要多长时间响应客户端的输入
在反应时间很重要的多人游戏中,Ping值越低越好
ping Latency(延迟)和Lag(滞后)
卡顿的终极解决方案终究是有一个良好的网络连接
游戏中的Ping有以下特点
- 作为主机的玩家Ping为0
- 现实世界不存在无限快的互联网连接
- 不能假设每个人都会有最好的互联网连接
- 可以通过在全球不同地区设置服务器来缓解这种情况(离服务器越近意味着与服务器来往的数据需要传送的物理距离越小、Ping越低)
- 有些非即时性的游戏在很大程度上不受ping影响,如棋类。
- 快节奏的多人射击游戏则需要重视ping,高ping可能导致无法游玩
延迟补偿
基于所有客户端都会有或多或少的延迟的前提,延迟补偿(lag compensation)是一种处理延迟的技术,在有足够延迟补偿的情况下客户端将会感觉到他们的游戏表现好一些
并且在有足够延迟补偿的情况下,甚至可以给人一种游戏完全没有延迟的错觉
延迟补偿也是在延迟不高的前提下,如果延迟过高延迟补偿也没用
在射击游戏中,玩家往往会注意到在ping高于50毫秒时就有差异了,但是50ms的ping很常见,所以采用延迟补偿技术处理这个
客户端预测
可以拓展阅读:
- 多人网络游戏服务器开发基础学习笔记 II: 帧同步 | 游戏客户端预测原理分析 | FPS 游戏状态同步
- 2.快节奏的多人游戏 (第二部分):客户端预测和服务器协调
客户端预测(Client-Side Prediction)允许客户端先移动,通知服务器你在移动。随后在服务器端真正的移动,并将行为复制回客户端
当服务器权威的版本复制回到你的后,你的角色必须重置为到这个权威的位置,而这回导致抖动。
例如客户端可能向前移动了3m,而服务器只移动了2m,那么你就得闪回1m。
合适的服务器测预测会将这考虑在内,知道多少移动请求被发送给了服务器,并且只会在服务器和客户端不同步的时候修正
本地处理不重要的东西
当涉及到其他不影响重要玩法的内容时,可以有一些东西在客户端本地完成而不必经手服务器。
例如对于射击这件事。服务器自然应当掌控玩家的射弹是否击中他人。但是诸如枪口火焰或者射击动画则可本地处理。不同游戏的处理方式略有不同:
- 开火,但是电脑没有生成射弹(等待服务器复制回来)
- 开火,立马生成代理射弹但是击中敌人不造成伤害(服务器有自己的权威射弹和伤害检测)
- 开火,客户端生成代理射弹,服务器生成权威射弹,等服务器复制过来时权威版本会替代代理版本
这一切取决于游戏本身的设计和开发者团队的决策,每一种技术都有其自身的优劣,但总要有所妥协。
详细内容看:[UE笔记]多人游戏中的本地射击效果
插值
当客户端同步了服务器的位置时,如果位置差距过于明显,会有类似“闪回”的操作。这种抖动会下降游戏体验。因此可以将当前位置插值到实际位置,这样就能平滑过渡。缺点是插值慢慢移动到正确的需要时间,而经过了插值过去这段时间,这个位置已经过期了,所以本身就是一种延迟。
外推法
如果你知道对手在往哪个方向跑,你可以假设他们会继续以同样的方式跑步。这种方法子啊快节奏的射击游戏未必适用,也可能会导致比没用外推法的情况下更严重的不精确。
虚幻引擎的角色移动组件
虚幻引擎的角色移动组件高效地采用上述几种方法。如果你的ping非常高,你仍可以移动你的角色,并且角色移动组件将使用你的速度来推断你在其他机器上的位置,以让你的角色在他们的机器上移动地更流畅。
如果需要修正,角色移动组件会使用插值让修正平滑。
如果服务器和客户端位置太难同步,角色移动组件将会传送你回正确位置,这就是Rubber-Banding
因为角色移动组件很好地实现了延迟补偿,我们一般会看到其他玩家在我们的游戏中很流畅地移动。并且即使会出现延迟,我们还有会有顺滑的体验,至少在Ping值太高之前是这样的。
服务器倒带法
服务器会跟踪玩家的位置并存储这些信息到某种移动历史中。客户端攻击时会向服务器发送攻击的细节包括攻击的时间,然后服务器会查看你的攻击时间,倒带时间重新定位玩家到他们之前在这个时间点的位置,根据客户端的攻击信息,查看你的子弹或者射线追踪在服务器权威角色间的实际命中。由此作出是否击中/击杀的判断并反馈。服务器然后将所有角色放回到正确位置并继续游戏。
这导致了一个玩家即使已经跑到掩体后面,仍可能被淘汰,因为可以倒带到跑到掩体前被击中。这对高ping玩家是友好的,但是对其他人可能有糟糕的体验。
你可以选择当某些玩家ping过高就不为他们使用倒带法。文章来源:https://www.toymoban.com/news/detail-431067.html
总之为了处理不同Ping值之间玩家的游戏体验,总要有所取舍。如果确信一个游戏的响应性很重要,那就尽我们所能来补偿延迟。文章来源地址https://www.toymoban.com/news/detail-431067.html
到了这里,关于[UE笔记]延迟与延迟补偿的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!