CS2 投擲物軌跡本質是帶能量損耗的碰撞求解。牆面不是光滑平面,而是碰撞盒拼出的台階。版本更新最先動的往往不是重力,而是這些隱形稜。與其背線,不如學會讀面。
導語
很多人練道具的方式是記住一條線:站在這裡,瞄這裡,跳投。這條線在當版本有效,下個版本可能就變成「差半格」。問題不在於你記性不好,而在於你記的是結果,不是幾何。投擲物軌跡的本質是一次帶能量損耗的碰撞求解,牆面不是平面,是台階、稜角與碰撞盒的拼接。版本一動,最先變的往往不是重力,而是這些「隱形稜」。
一、碰撞盒的隱形稜:為什麼彈跳點比出手點更敏感
先釐清一個事實:CS2 的投擲物碰撞檢測用的是簡化的碰撞幾何,而不是你眼睛看到的貼圖表面。貼圖上的磚縫、浮雕、裝飾線條不參與碰撞,真正參與的是被烘焙出來的碰撞盒。碰撞盒為了效能做了簡化,於是牆面在物理世界裡不是光滑的,而是由若干平面拼出的「台階」。
這些台階之間的交界就是隱形稜。投擲物擦過稜角時,入射角與反射角的計算會瞬間換一個參考面。你看到的是「彈了一下」,物理上是一次法線方向的突變。出手點差半格,命中稜角的位置就不同,反射後的落點可能差出兩三個身位。這就是為什麼同一套預設道具線,在版本更新後有人覺得「還能用」,有人覺得「完全不對」——他們站的位置不同,碰到的稜不同。
更隱蔽的是彈跳係數。不同材質的碰撞面在引擎裡帶有不同的能量損耗參數,木質、金屬、混凝土在彈跳後的速度衰減並不一致。版本更新如果調整了某類表面的物理參數,或者重新烘焙了某張地圖的碰撞盒,你記憶裡的「彈一下剛好進煙」就會變成「彈一下砸牆」。這不是玄學,是參數遷移。
二、預設道具線的三層依賴:出手、稜、落點
一條預設道具線看似只依賴出手點,實際上至少有三層依賴。
第一層是出手點與視角。站位的腳位、蹲起狀態、滑鼠的俯仰角,決定了投擲物初始速度向量的方向與大小。跳投的時機還額外疊加了角色垂直速度,這一項在 tick 取樣下並不連續,所以同一套跳投在不同網路條件下會有細微差異。
第二層是碰撞路徑上的稜。從出手點到落點之間,投擲物可能經歷一次或多次彈跳。每一次彈跳都是一次資訊損失:你只知道大致會彈,但不知道會擦到哪條稜。預設道具線的價值在於它把這條路徑壓縮成一個可重現的動作,但可重現的前提是稜沒有變。
第三層是落點判定。煙霧的展開是一個體積,閃光的引爆是一個計時,燃燒的蔓延是一組火焰單元。落點差半格,煙霧可能少封一條縫,閃光可能早爆零點幾秒。這些差異在訓練圖裡看不出來,在實戰裡就是「我先看到煙邊」還是「我先被白」。
三層依賴裡,出手點最容易被記住,落點最容易被驗證,唯獨中間的稜最容易被忽略。而版本更新最常動的,恰恰是中間這層。
三、按版本重練:不是推翻記憶,是重建索引
聽到「按版本重練」,很多人的第一反應是把所有道具線推倒重來。沒必要,也不現實。更合理的做法是重建索引:把「站位—瞄點—落點」的線性記憶,改寫成「出手點—預期彈跳次數—關鍵稜—落點容差」的結構化記憶。
具體怎麼做?第一步,在訓練圖裡把每條預設道具線拆成兩段:出手到第一次彈跳,第一次彈跳到落點。分別記錄這兩段的容差。如果第一段容差很小、第二段容差很大,說明這條線對稜很敏感,版本更新後要優先複驗。
第二步,給每條線標註「可替代落點」。同一顆煙往往有兩到三條路徑,版本調整後一條失效,另一條可能仍然可用。把替代路徑提前練進肌肉記憶,比臨時找線靠譜得多。
第三步,建立版本複驗清單。每次大版本更新後,先跑一遍對稜敏感的線,再跑容差大的線。不要憑感覺「好像還能用」,要用落點判定說話:煙有沒有縫、閃有沒有白、火有沒有燒滿。
四、可遷移的投擲直覺:從記線到讀面
真正抗版本的不是某一條線,而是一種讀面的能力。看到一面牆,你能大致判斷它的碰撞面朝向、稜的位置、彈跳後的速度衰減方向。這種直覺來自反覆的「故意打偏」:在訓練圖裡故意讓投擲物擦稜,觀察反射角的變化,記錄不同材質下的彈跳距離。
當你有了讀面的能力,版本更新就不再是「我的線廢了」,而是「這面牆的稜變了,我換個擦法」。預設道具線依然要練,但練的目的不是背答案,而是建立一套可以隨版本遷移的幾何直覺。牆不是平面,是台階;道具線不是咒語,是路徑。路徑會變,幾何不會騙人。