你有感觉到CS2移动的不一致性吗?

日前Reddit用户Powerful_Seesaw_8927进行了一项对比CS2与CS:GO移动机制的全面测试。  

该用户使用宏脚本测试了CS:GO在64 tick、128 tick以及CS2 sub-tick下的移动情况。他注意到,在CS2中每次按下“D”键时,玩家最终位置与起点存在差异,而CS:GO中则无此现象。  

在名为“CS2移动不一致性”的讨论帖中,一名Valve开发者确认团队已注意到该问题,并正在致力于寻找解决方案。CS领域博主Thour在社交媒体上指出,这一问题影响了游戏中急停和peek等关键操作,这或许能解释为何许多玩家感觉CS2中的移动手感与CS:GO不同。

他是如何测试的?

以下为Powerful_Seesaw_8927的具体测试内容:

CS2移动机制不一致性  

自CS2发布以来,包括我在内的许多玩家一直反馈其移动机制存在一种奇怪的“不一致感”。与CS:GO(尽管有缺陷,但移动干脆、响应及时且可预测)相比,CS2的移动常显得飘忽、不可预测且不精确。  

令人沮丧的是,近两年来始终没有可靠的数据解释或修复方案,大多数讨论停留在理论和猜测层面。因此,我设计了一项简单且可复现的测试,对比CS2与CS:GO(64tick和128tick)的移动表现。  

测试设置  

- 地图:aim_bots  

- 起点坐标:  

  - CS2:setpos 0.000000 0.000000 64.031250;setang 0.000000 0.000000 0.000000  

  - CS:GO:setpos 0.000000 0.000000 64.093811;setang 0.000000 0.000000 0.000000  

  (仅Z轴略有差异,不影响水平移动)  

- 宏命令:按下“D”键750毫秒(原表述笔误为700毫秒,不影响结论)后释放,记录玩家最终位置(主要为Y轴)。  

- 目标:在一致环境下,重复相同输入应产生小范围可预测的输出,以评估不同版本的移动一致性。各版本测试20次。  

测试结果  

CS:GO – 64 Tick  

测试序号 Y轴坐标

| 1-20次   | -189.966919(13次)<br>-186.060669(7次) |  

- 不同坐标数:2种  

- 结论:一致性极高  

CS:GO – 128 Tick  

测试序号 Y轴坐标

| 1-20次   | -187.370255(14次)<br>-189.323380(5次)<br>-185.417130(1次) |  

- 不同坐标数:3种(仅1次出现-185.417130)  

- 结论:仍高度一致且可预测  

CS2 – sub-tick

测试序号 Y轴坐标

| 1-20次   | 数值分散至-185.417130至-190.302002之间,共出现10种以上不同坐标 |  

- 不同坐标数:10+种,高度分散  

- 结论:一致性严重不足  

结论  

- CS:GO:即使在64 tick下,移动表现依然可靠。  

- CS2:相同输入下,输出完全不可预测。  

- 直接影响:急停、peek、架点及整体移动操控等核心机制均受影响。  

最终呼吁  

这已不再是单纯的“手感问题”——数据证明CS2移动机制存在真实且可复现的不一致性,这很可能是许多玩家觉得“游戏不对劲”的关键原因。 

Valve,您曾呼吁提供可复现的测试——这就是答案。请修复这一问题。  

开发人员做何反应?

vMcJohn(开发人员):嗨!我很好奇你用的是什么程序来按下D键700毫秒时长的?是AutoHotkey脚本还是其他工具?谢谢!

Powerful_Seesaw_8927:我用的是 Wooting 键盘自带的宏程序 Wootomation。这是个非常简单的宏:按下按键后保持700毫秒(其实保持时间可能不影响结果),然后松开。如果你需要,我可以通过私信或其他平台发送未加速的测试视频和宏设置截图…… 再次感谢你的评论!

vMcJohn:感谢反馈。在Windows(及其他平台)上,很难实现精度高于15毫秒的定时器。这意味着你设置的 “等待700毫秒” 实际可能在685到715毫秒之间波动。这种误差在64 tick下几乎无影响,在128 tick下有轻微影响,但在CS2 sub-tick的微秒级时间戳机制中可能成为大问题。

这里有一个AutoHotkey脚本,尝试复现你的测试,精度可达2毫秒以内:

#NoEnv

; #Warn  

SendMode Input

SetWorkingDir %A_ScriptDir%

TimePeriod := 2


#SingleInstance Force

Numpad0 & Numpad1::


DllCall("Winmm\timeBeginPeriod", "UInt", TimePeriod)


Send, k

Sleep, 1500


Send, {d down}

Sleep, 700

Send, {d up}


DllCall("Winmm\timeEndPeriod", "UInt", TimePeriod) 

return

需要说明的是,我们已知CS在计算X和Y轴(地面)加速时存在问题:当前机制与帧率非完全独立。

感谢你进行严谨的科学测试,祝你好运!

Powerful_Seesaw_8927:这解释很有道理 —— 感谢你深入分析。很高兴知道官方正在处理这个问题。你最后的评论是我能得到的最好回应。我的工作有价值,科学思维得到认可,这对我意义重大。尤其作为量子计算专业的学生,能听到行业前辈的肯定让我非常开心。对我来说,掌握如何进行严谨的测试和科学研究极其重要。感谢您,先生,祝您一切顺利!

Powerful_Seesaw_8927还做了什么测试?

除了移动测试之外,Powerful_Seesaw_8927先前还发布文章,分析了CS2和CSGO的武器扫射转移情况。

他通过逐帧对比 CS:GO 与 CS2 中武器满弹道扩散时的视角变化,发现两者在弹道恢复阶段存在显著差异:

CS:GO:视角恢复平滑且线性 —— 每次射击后,视角偏移角度持续稳定递减,确保弹道扩散的可预测性与可控性。

CS2:恢复阶段存在 “微波动”—— 视角偏移角度递减后,可能轻微回升,随后再次递减,在连续射击间重复数次这种波动。这种 “微抖动” 导致弹道不稳定感,增加了控制难度。

他认为这可能和sub tick有一定的关系,该机制可能引入了后坐力表现的细微不一致性。