当前位置: 首页 > news >正文

关于dota2同步方式

Issues · ValveSoftware/Dota2-Gameplay · GitHub

同样,我不推荐使用那个脚本,让我解析Dota2中的网络模型是怎么工作的,和人们讨论的单位延时是怎么来的。

这个源引擎是一个以规律的间隔发送单位状态快照到客户端的基于UDP的网络系统。

这就是cl_updaterate,它现在的在我们服务器上的帧率是20HZ。这表示每50ms,这个游戏就传送

游戏中所有单位的位置,状态等等。(为了你们的好奇心,这个模型是在idSoftware以Quakeworld开发出来的,当时我正和John Carmack工作)。

你的客户端处理这个的方式是它在这些快照之间插值。默认的,cl_interp_ratio是2,这表明它在三个快照之间插值。让我用一个timeline解释。假设你是0延时(或者很低的延时)

Code:

        Time           Server                 Client

        0.00        Snapshot A                Idle

        0.05         Snapshot B                Gives command for the hero to move

        0.10         Snapshot C                Idle

        0.15         Snapshot D                 Idle

        这种情况下,你第一个获得了快照A,这时客户端什么都不做,因为它没有后续的快照。快照B来了,客户端开始在A和B之间插值。此时客户端控制英雄开始移动。服务器立即响应这个命令,并且在服务器上移动这个英雄。快照C收到后,但是客户端仍在A和C之间插值,因为cl_interp只有0.1或者10HZ。D最后来了,现在你开始看到单位完全响应于你的移动请求,因为你现在是在B和D之间插值。我们在10HZ插值而不是20HZ,所以如果你丢失了从服务器来的包,或者延迟了一些微秒,我们通过在丢失的包附近插值平缓的过渡了这个。

        

        没有人为单位延时,它取决于快照之间的插值(它实现了客户端上的平缓移动)导致了让它看起来有一些延时。因为插值的事件是10HZ(100ms),它大概花了一半的这个时间,50ms,在一个单位开始移动或者开始响应最新的协议之前。

        现在这个模型被调整为诸如Counterstrike,Left 4 Dead,Team Fortress2等具有预测行为的游戏。Dota2没有预测行为,因为你基本上是在战场上给单位下达命令。你不是像这些游戏一样直接控制玩家,并且那里没有基于瞄准扫描的需要预测和滞后补偿来瞄准的武器。你不需要在dota2中瞄准,你只需要下达命令。

        

        通过这个,我研究了提高了快照的频率去降低插值时间到50ms。这回让可察觉的响应时间降低到平均25ms。

        当然,你需要在所有这些基础上加上你的ping时间。如果你的ping是135ms,那么他就要多花费这些时间来让单位去响应。我不确定为什么ping从France到我们Luxembourg新的数据中心会这么高。我们最近收集了我们在那儿的服务器,我们还在和ISPs调整和交涉。我会和我们的网络管理者讨论这个,但是邮给我追踪路线会更好。

        dota2这篇论坛上的资料透露,dota2在此基础上,去掉了客户端预测,减少了拉扯现象,不过玩家的控制信息得不到立即反馈,该文章也是为了解答玩家关于控制延迟的疑问。

总体的意思是DOTA2使用udp,快照同步的方式


http://www.taodudu.cc/news/show-5696985.html

相关文章:

  • PCie协议之-TLP Header详解(一)
  • 随笔:贝特弹琴
  • html特殊字符的html,js,css写法汇总
  • Frida-RPC 调用
  • Elasticsearch_sql插件安装+使用
  • 通俗易懂的策略模式讲解
  • python dota2数据 2 英雄名和胜负
  • 微信小程序—使用app.js里定义的全局方法
  • 不用下载,使用app的方法,太绝了
  • vue3+ts使用app.config.globalProperties全局挂载实例方法,扩展模块解决ts类型检查报错
  • 使用adb操作app
  • matlab使用App designer生成可独立运行的app(预测模型为BP神经网络模型)
  • 解决微信小程序中在其他页面无法使用app.js中获取的userInfo或openid的问题
  • 微信小程序关于utils.js 需要使用app.js 的全局变量,怎么做?
  • 使用App Ops修改APP隐藏权限(Android)
  • 在matlab中使用APP designer创建多窗口APP
  • WPF教程(十)使用App.xaml
  • 使用AppUploader上传ipa文件到APPstore
  • 网络提速器 v1.1 免费
  • 使用 mamba 提速 conda
  • Sqoop提速性能调整
  • android 9.0 后台录音,不限制1分钟
  • Android多媒体之照相、录音、录像之视图横拉
  • Android6.0以下判断手机录音和相机权限
  • html5录音兼容性,详解HTML5 录音遇到的坑
  • php手机网页在线录音ios,iOS 实现录音功能
  • 备忘录想要查看录音时长怎么办?
  • c语言密码登录
  • C语言求鞍点
  • C语言工程创建
  • 【C语言总结篇】新起点
  • Linux如何写C语言
  • 更改administrator名称
  • git本地配置用户名_git配置全局用户名
  • 【笔记】Win10 安装系统跳过创建用户,直接启用 Administrator
  • 好听的歌曲 那一天