撰写了文章 发布于 2020-03-12 19:22:09
真就一枪呗—谈谈彩虹六号围攻的延迟机制
昨晚愉快66的时候,小伙伴蹲在墙角守点,被一个kali瞬狙打倒。就在我们感慨这个速度有点快的时候,回合结束的回放中我们看到了kali是跟在一个白毛分身后面出去,看到我朋友小半秒才开的枪。而我们在小伙伴的视角里完全没看到这个白毛分身,同时感觉kali基本一个“我起了,一枪秒了”的状态。
因此,我去找了一下育碧的一些开发日志,想看看他们是如何解释这个情况的。
先说太长不看的结论。
1.确实有这个情况。
2.ping越低越好。
3.互架在知道对方位置的情况下主动拉提前枪出去更好。
4.育碧给的资料与实际情况感受不一致,推测是临时的网络波动。
以下是详细解释。
假设玩家AB在互架,此时A(Player1)探身出去谋求击杀B(Player2)。假设A的延迟是200ms,B的延迟是100ms。额外说明一点,延迟,也就是ping其实指的是客户端到服务器一来一回的时间,所以实际上计算我们某个操作给到服务器的时候应该把ping减半。育碧给出的流程图如下:
请注意底下的四个数字,200ms,350ms,550ms,600ms。这是一些重要的时间节点,以下是详细流程解释。
玩家A探身的时间点是第200ms,100ms后服务器收到A的探身同时转发给B,经过50ms,B收到A探身的信息,也就是说此时B可以看见A探身。这个时间节点是350ms。
然后我们视线重回A探身的时间节点,200ms,A反应了300ms完成了对B的击杀并将数据传输给服务器,数据传输时间100ms,也就是说服务器在200ms+300ms+100ms = 600ms的时候,收到了玩家A击杀玩家B的数据。但别急,还没完,服务器还要考虑B的数据。
对于B来说,他在第350ms的时候看到了A,如果B想让服务器认为他杀死了A,那他需要在600ms前将他射杀A的数据传回给服务器。考虑到B的数据上传给服务器还需要50ms,因此玩家B需要在第550ms之前,将A击杀。考虑到玩家B是在第350ms看到的A,他只有550-350 = 200ms的时间来击杀B。
这里其实已经出现了一些状况可以解释开头提出的疑问。玩家A想要击杀玩家B耗时300ms,但是玩家B想对玩家A完成反杀,留给B的时间只有200ms。
对此,育碧给出的公式是,玩家B的击杀窗口=玩家A的反应时间-玩家B的ping(200=300-100)。这里采用的是ping而非之前流程图中的传输速率,是因为从服务器下发探身数据到B,再到B发送击杀数据到服务器有个一来一回的过程,传输了两次,所以本质上可以直接用ping来代替。
我们可以由这篇文章得出两个结论。
1.双方互架,主动的一方击杀时间会大于等于被动的一方,因此如果知道对方在哪里,提前枪拉出去是有一定优势的。
2.由被动的一方击杀窗口公式可以得出,ping越低越好。假设B的ping为0,那B的击杀窗口其实是等于A的反应时间的。
3.高ping战士没卵用(两个结论有三个不是常识吗)
但这个理论仍不能解释我们实际感受到的那种,我看他一枪秒我,他却看我看了大半秒的感觉。毕竟大多数人的ping都是在50上下徘徊。对此我的推论是,可能由于加速器或者临时的网络波动导致的,毕竟说到底我们也不是每次对枪都这样。
要素过多 1年前
狼崖雪 [作者] 1年前
发布