[UE笔记]延迟与延迟补偿

这篇具有很好参考价值的文章主要介绍了[UE笔记]延迟与延迟补偿。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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笔记]延迟与延迟补偿

详细内容看:[UE笔记]多人游戏中的本地射击效果

插值

当客户端同步了服务器的位置时,如果位置差距过于明显,会有类似“闪回”的操作。这种抖动会下降游戏体验。因此可以将当前位置插值到实际位置,这样就能平滑过渡。缺点是插值慢慢移动到正确的需要时间,而经过了插值过去这段时间,这个位置已经过期了,所以本身就是一种延迟。

外推法

如果你知道对手在往哪个方向跑,你可以假设他们会继续以同样的方式跑步。这种方法子啊快节奏的射击游戏未必适用,也可能会导致比没用外推法的情况下更严重的不精确。

虚幻引擎的角色移动组件

虚幻引擎的角色移动组件高效地采用上述几种方法。如果你的ping非常高,你仍可以移动你的角色,并且角色移动组件将使用你的速度来推断你在其他机器上的位置,以让你的角色在他们的机器上移动地更流畅。

如果需要修正,角色移动组件会使用插值让修正平滑。

如果服务器和客户端位置太难同步,角色移动组件将会传送你回正确位置,这就是Rubber-Banding

因为角色移动组件很好地实现了延迟补偿,我们一般会看到其他玩家在我们的游戏中很流畅地移动。并且即使会出现延迟,我们还有会有顺滑的体验,至少在Ping值太高之前是这样的。

服务器倒带法

服务器会跟踪玩家的位置并存储这些信息到某种移动历史中。客户端攻击时会向服务器发送攻击的细节包括攻击的时间,然后服务器会查看你的攻击时间,倒带时间重新定位玩家到他们之前在这个时间点的位置,根据客户端的攻击信息,查看你的子弹或者射线追踪在服务器权威角色间的实际命中。由此作出是否击中/击杀的判断并反馈。服务器然后将所有角色放回到正确位置并继续游戏。

这导致了一个玩家即使已经跑到掩体后面,仍可能被淘汰,因为可以倒带到跑到掩体前被击中。这对高ping玩家是友好的,但是对其他人可能有糟糕的体验。

你可以选择当某些玩家ping过高就不为他们使用倒带法。

总之为了处理不同Ping值之间玩家的游戏体验,总要有所取舍。如果确信一个游戏的响应性很重要,那就尽我们所能来补偿延迟。文章来源地址https://www.toymoban.com/news/detail-431067.html

到了这里,关于[UE笔记]延迟与延迟补偿的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4/5多人游戏详解(二、通过OnlineSubsystem和OnlineSubsystemSteam连接steam,如实现在steam类游戏里面shift+tab打开steam的弹窗)

    目录 IP地址 OnlineSubsystem 插件打开 模块加载 Config修改 Cpp 测试: 在之前的文章中,我们讲解了在同一个WiFi下相互连接的制作。 但是我们并不只想在同一个本地连接,我们想要的是在不同的WiFi下一起玩游戏。 所以我们先来讲解一下ip地址: 现在在同一个WiFi下,3个电脑的ip地

    2024年02月15日
    浏览(50)
  • UE4/5多人游戏详解(七、自定义委托,实现寻找会话和加入会话的函数,通过Steam进行两台电脑的联机)

    目录 可能出现问题(在六部分的测试可能无法连接的问题【在末尾加上了,怕有人没看见在这里写一下】) 自定义委托 调整位置 创建更多的委托和回调函数给菜单: 多播和动态多播  代码: 委托变量  代码: 回调函数  代码: 绑定委托和动态函数:  代码: 头文件添加

    2024年02月04日
    浏览(122)
  • 《UE5_C++多人TPS完整教程》学习笔记8 ——《P9 访问 Steam(Acessing Steam)》

    本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P9 访问 Steam(Acessing Steam)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。 本节课将接着上节课 《P8 为项目配置 Steam(Confi

    2024年02月19日
    浏览(45)
  • 《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》

    本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P16 会话接口委托(Session Interface Delegates)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。 本节课我们将向新创建的子系统添

    2024年02月20日
    浏览(49)
  • 【Unity2022】Unity多人游戏开发教程-Netcode for GameObjects-使用命令行启动多人游戏

    首先亮出文档,可以直接去看官方文档。 本文章大部分内容来源于官方文档,另一部分为笔者讲解的教程。 如果英语不好,或看不懂文档的人,可以阅读本文章。 官方文档 官方文档的中文翻译: 中文翻译 本教程使用的开发环境如下: Windows10 Unity 2022.3.0f1c1 Netcode for GameOb

    2024年02月08日
    浏览(57)
  • 无线充电学习笔记-补偿网络2(LCC分析方法)

    qquad 其中Lf1/Lf2是原/副边补偿电感,Cf1/Cf2是原/副边并联补偿电容,C1/C2是原/副边串联补偿电容,L1/L2是原/副边电感。推导谐振条件如下,这是一个恒压谐振条件(CC/CV的谐振条件有很多,因此可以通过设置不同的工作频率来达到CC/CV输出) qquad M模型如下: 原边副边分别使用

    2024年04月17日
    浏览(37)
  • 21uec++多人游戏【AI联机】

    一句话,跟掉血有关的代码都在服务器端执行 修改小球的游戏开始函数 在服务器端,小球自动寻找路径 修改SelfDestruct函数 在服务器端小球会对自己施加伤害 修改每帧函数 在服务器端,小球自动寻找路径 修改重叠函数 在服务器端,小球自爆倒计时 修改生命值组件 添加网络

    2024年02月15日
    浏览(48)
  • Unity联网多人游戏技术方案调研

    Listen Server (Host) 和 Relay转发服务器游戏包同时包含客户端和服务端逻辑,联网时一个客户端开主,称为Host,其他客户端连入。局域网和互联网都支持。互联网需要有一个匹配服务器帮助找到不同人建立的主机。如果不使用Relay服务器,那对于互联网连接就要使用NAT穿透下的

    2023年04月09日
    浏览(77)
  • 11uec++多人游戏【自定义表面-物理材质】

    打开编辑器设置,点击物理   拉到这个位置  设置两个表面材质  创建新的文件夹 创建物理材质 进入材质,赋予表面    打开该头文件 定义两个变量  打开武器类,将打击特效的名字改成默认特效,当没有打到人身上,就用这个特效。 导入头文件 完善fire函数 编译之后,

    2024年02月06日
    浏览(36)
  • unity使用PhotonEngine实现多人联机游戏开发(一)

    先来了解一下PhotonEngine(光子引擎),这是德国ExitGame公司开发的网络引擎,photonengine简单易上手,很多游戏公司开发的网络游戏都是使用的这个。这个网络引擎里面包括了PhotonCloud(光子云)、photonServer(光子服务器)、PhotonQuantum(确定性量子引擎)、PhotonVoice(光子语音)

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包