济南shuncheng科技 网站建设,外贸网,学做网站要什么学历,免费检测网站seoIssues ValveSoftware/Dota2-Gameplay GitHub
同样#xff0c;我不推荐使用那个脚本#xff0c;让我解析Dota2中的网络模型是怎么工作的#xff0c;和人们讨论的单位延时是怎么来的。 这个源引擎是一个以规律的间隔发送单位状态快照到客户端的基于UDP的网络系统。
这就是…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所以如果你丢失了从服务器来的包或者延迟了一些微秒我们通过在丢失的包附近插值平缓的过渡了这个。 没有人为单位延时它取决于快照之间的插值它实现了客户端上的平缓移动导致了让它看起来有一些延时。因为插值的事件是10HZ100ms)它大概花了一半的这个时间50ms在一个单位开始移动或者开始响应最新的协议之前。 现在这个模型被调整为诸如CounterstrikeLeft 4 DeadTeam Fortress2等具有预测行为的游戏。Dota2没有预测行为因为你基本上是在战场上给单位下达命令。你不是像这些游戏一样直接控制玩家并且那里没有基于瞄准扫描的需要预测和滞后补偿来瞄准的武器。你不需要在dota2中瞄准你只需要下达命令。 通过这个我研究了提高了快照的频率去降低插值时间到50ms。这回让可察觉的响应时间降低到平均25ms。 当然你需要在所有这些基础上加上你的ping时间。如果你的ping是135ms那么他就要多花费这些时间来让单位去响应。我不确定为什么ping从France到我们Luxembourg新的数据中心会这么高。我们最近收集了我们在那儿的服务器我们还在和ISPs调整和交涉。我会和我们的网络管理者讨论这个但是邮给我追踪路线会更好。 dota2这篇论坛上的资料透露dota2在此基础上去掉了客户端预测减少了拉扯现象不过玩家的控制信息得不到立即反馈该文章也是为了解答玩家关于控制延迟的疑问。
总体的意思是DOTA2使用udp快照同步的方式