Processors
互動
KCC 處理器在與 KCC 互動時扮演重要角色。
KCC 支援兩種互動類型:
- 碰撞
- 基於物理的互動。
- 支援常規碰撞體和觸發器。
- 當 KCC 開始/停止與場景物件碰撞時觸發。
- 靜態碰撞體 - 處理器資產必須連結到 Quantum 靜態碰撞體元件上的使用者資產。
- 實體 - 必須在實體原型中新增
KCC Processor Link
元件並分配處理器資產。
- 修改器
- 透過
KCC.AddModifier()
和KCC.RemoveModifier()
手動註冊的KCCProcessor
資產。
- 透過
KCCProcessor
宣告了兩個重要方法:
C#
public virtual bool OnEnter(KCCContext context, KCCProcessorInfo processorInfo, KCCOverlapHit overlapHit) => true;
- 當 KCC 開始與碰撞體碰撞時叫用。
- 返回值控制互動的開始
- 可以延遲互動直到滿足特定條件(直到返回真才會在 KCC 中註冊)
- 例如當玩家進入某區域且僅在滿血時獲得速度增益
C#
public virtual bool OnExit(KCCContext context, KCCProcessorInfo processorInfo) => true;
- 當 KCC 停止與碰撞體碰撞時叫用。
- 返回值控制互動的結束
- 可以延遲停止互動直到滿足特定條件(在返回真之前會一直保持在 KCC 中註冊)
- 例如當玩家進入某區域並獲得減速減益,移除會被延遲直到玩家滿血(無論玩家是否仍在該區域內)
階段
階段是一系列在處理器上執行的特定方法調用序列,由介面類型來唯一標識。
KCC 在更新期間支援以下階段:
IBeforeMove
- 在移動開始時執行。用於配置 KCC、啟用/禁用功能、新增力等…IAfterMoveStep
- 在每次移動步驟(物理查詢 + 從碰撞體中脫離)後執行,並在更新碰撞命中及觸發OnEnter()
/OnExit()
回調之前執行。用於輕微位置修正、向量投影等…如果 KCC 移動過快(應用 CCD),此方法可能會被多次連續調用。IAfterMove
- 在移動結束時執行。用於應用任何後處理。
C#
public unsafe class StepUpProcessor : KCCProcessor, IAfterMoveStep
{
public void AfterMoveStep(KCCContext context, KCCProcessorInfo processorInfo, KCCOverlapInfo overlapInfo)
{
// 1. Detect blocking geometry
// 2. Push character upwards based on unapplied movement.
}
}
預設處理器
以下功能有獨立的實現,使得它們非常容易剝離或替換為不同的實現。
環境處理器
- 隨 KCC 附加元件提供的預設處理器。
- 定義地面和浮空狀態的行為。
- 沿地面切線的投影移動。
- 簡單的加速度和摩擦力模型。
- 自訂重力。
- 跳躍倍率。
- 實現
IBeforeMove
階段 - 用於計算所需的KCCData.DynamicVelocity
及KCCData.KinematicVelocity
。 - 實現
IAfterMoveStep
階段 - 用於在每次移動步驟後重新計算屬性(例如地面上的運動速度投影)。 EnvironmentProcessor
資產位於Assets\Photon\QuantumAddons\KCC\AssetDB\Processors
。

角色的速度由此處理器定義,可用於場景物件上模擬各種環境中的行為,如水、泥濘、冰面。
爬升處理器
- 允許檢測台階(阻擋水平移動的幾何體,並在一定高度有可行走表面)。
- 如果檢測到台階,KCC 會向上移動直到著地。
- 最大台階高度由
Step Height
定義。 - 向前台階檢查距離由
Step Depth
控制。 - 向上移動量等於未應用的水平移動量。
- 向上移動速度乘以
Step Speed
以補償水平速度的損失。 StepUpProcessor
預製件位於Assets\Photon\QuantumAddons\KCC\AssetDB\Processors
。

下圖顯示檢測台階的過程:

- 當角色在水平方向被障礙物阻擋時,向上檢查。
- 向前檢查以檢測角色前方的空間是否無碰撞。
- 地面吸附檢查以檢測地面是否可行走。
- 只要所有 3 項檢查通過,角色就會持續向上移動。
地面吸附處理器
- 允許在失去地面接觸時保持著地狀態(樓梯、不平坦地形)。
- 如果重力不足,將角色推向地面。
- 最大吸附距離由
Snap Distance
定義。 - 向地面的移動速度由
Snap Speed
定義。 GroundSnapProcessor
預製件位於Assets\Photon\QuantumAddons\KCC\AssetDB\Processors
。

下圖顯示地面吸附的過程:

角色會被 虛擬 向下推動,直到滿足以下任一條件:
- 角色碰到可行走地面 => KCC 保持著地並向地面移動。
- 角色碰到不可行走表面且無法沿其滑動 => KCC 失去著地狀態。
- 達到
Snap Distance
=> KCC 失去著地狀態。