This document is about: QUANTUM 3
SWITCH TO

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(提高解除穿透的品質)。
Continuous Collision Detection
連續碰撞檢測。

碰撞過濾

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