D-20260814-08|Projectile LaunchExit 幾何離膛¶
背景與驅動力¶
預配置 projectile 在 hold joint 移除時仍可能位於來源 weapon convex 內;hard CCD 會正確保留這個 初始接觸,造成非設計性的來源武器自撞。固定幀數無法適應不同尺寸與特殊造型,永久 owner immunity 又會破壞既有未連結同車 body 可碰撞、自傷的政策。
考慮過的選項¶
- 固定幀數 grace:不同尺寸、速度與特殊造型無共同正確幀數,棄。
- projectile 對來源車永久免疫:破壞既有自體碰撞與反彈自傷,棄。
- 每 projectile 的 canonical convex LaunchExit 平面(採納)。
決定¶
- 每 projectile 保存 weapon-local、沿 Axis +Z 的量化
exitDistanceUm,不保存 rotation。 - Stage 3 以完整 canonical convex support 與 translational SAT 驗證正向、必要外界、無新阻擋且抵達 平面時完整形狀已清除;無 primitive fallback,失敗即拒收。
- runtime 只過濾未清除 projectile collider 與 source weapon fixed proxy。場地、對手、來源車其他 part 與其他 projectile 仍可碰撞。
- 每 fixed step 由來源 weapon 當前權威 pose 轉換平面;完整 support 的最小投影越過平面再加
PROJECTILE_EXIT_CLEARANCE_M=0.001後,sourceCleared永久設 true,下幀恢復接觸。 - source weapon 先退出物理則直接清除;清除後反彈可正常撞擊與自傷,不重新取得 grace。
- SavedState v14/hash 保存
sourceCleared,world plane 與 rotation 不保存。PhysicsManifest、marker 與 builtin 基線升 v10;pre-launch 不保留 v9 相容或 migration。
後果與影響¶
特殊、雙管、環形與開放造型以各 projectile 的實際 convex 幾何表達,不受統一包圍 primitive 限制; contact hook 只增加必要 pair 的判斷。編輯器顯示每顆 projectile 的 LaunchExit 距離與 Axis 導出的平面, 並沿同一 Stage 3 規則顯示有效性。