Movement
移動步驟
以下方程式用於計算單一移動步驟的期望位置增量:
步驟位置增量 = (動態速度 + 運動速度) * 時間增量 + 外部增量
動態速度
- 累積外部力的速度
- 重力、爆炸衝擊力、力場、跳躍板
- 可以將 KCC 推上斜坡
- 使用預設
EnvironmentProcessor
時的相關 API:KCCData.DynamicVelocity
KCC.SetDynamicVelocity()
KCC.AddExternalForce()
KCC.AddExternalImpulse()
KCC.Jump()
運動速度
- 由用戶輸入動作計算的無約束速度
- 通常基於
KCCData.InputDirection
(入口點) - 只有可行走的表面會將 KCC 推上,以防止在陡峭斜坡上出現偽影(由
KCCData.MaxGroundAngle
控制) - 使用預設
EnvironmentProcessor
時的相關 API:KCCData.KinematicVelocity
KCC.SetInputDirection()
KCC.SetKinematicDirection()
KCC.SetKinematicSpeed()
KCC.SetKinematicVelocity()
外部增量
- 絕對位置偏移
- 用於在移動步驟結束時進行校正(在解除穿透後)
- 相關 API:
KCCData.ExternalDelta
KCC.SetExternalDelta()
移動演算法
KCC 的虛擬膠囊體總是透過計算的位置增量移動,然後從重疊的碰撞體中解除穿透。
- ✅ 這種方法提供了自然的幾何滑動效果。
- ✅ 大多數情況下只需要單一膠囊體重疊,這使得 KCC 非常高效。
- ❌ 有時在移動時會因多個碰撞體(通常是某些角落)而產生抖動,但這通常可以透過運行更多的解除穿透步驟來解決。
連續碰撞檢測 (CCD)
如果角色移動過快(單一步驟的位置增量大於半徑的 75%),則會將移動分為子步驟以避免穿過幾何體。
- 根據期望速度將移動分為較小的步驟。
- 單一步驟中的最大移動距離為半徑的 25-75%,由
KCC Settings
資產中的CCD Radius Multiplier
屬性控制。 - 75% 在大多數情況下效果良好,只有在 KCC 穿過幾何體時才降低此值。
- 在降低
CCD Radius Multiplier
之前,嘗試增加KCC Settings
資產中的Max Penetration Steps
(提高解除穿透的品質)。

碰撞過濾
- 主要過濾器是碰撞層遮罩 - 由
KCC Settings
資產中的Collision Layer Mask
屬性控制。KCC 不使用 物理設定 中的 層碰撞矩陣。 - 可以透過
KCC.SetIgnoreCollider()
明確忽略靜態碰撞體或實體。 - 使用
KCCContext.PrepareUserContext()
設置ResolveCollision
委派,以應用其他過濾規則。