This document is about: QUANTUM 3
SWITCH TO

Processor

Interaction

KCCのProcessorは、KCCのインタラクションにおいて重要な役割を果します。

KCCは2種類のインタラクションをサポートします。

  • Collision
    • 物理ベースのインタラクション
    • 通常のコライダーとトリガーをサポートします。
    • KCCがシーン上のオブジェクトと衝突を開始/停止した際にトリガーされます。
      • Static Collider - Processorアセットが、QuantumのStatic Colliderコンポーネントのユーザーアセットとしてリンクされている必要があります。
      • Entity - エンティティプロトタイプにKCC Processor Linkコンポーネントを追加し、Processorアセットを割り当てる必要があります。
  • Modifier
    • KCC.AddModifier()/KCC.RemoveModifier()から、KCCProcessorアセットを手動で登録します。

KCCProcessorには、2つの重要なメソッドが宣言されています。

C#

public virtual bool OnEnter(KCCContext context, KCCProcessorInfo processorInfo, KCCOverlapHit overlapHit) => true;
  • KCCがコライダーと衝突を開始した際に呼び出されます。
  • 戻り値によって、インタラクションを開始するかを制御できます。
    • 特定の条件を満たすまで、インタラクションを遅延させることもできます。(trueを返すまで、KCCには登録されない)
    • 例:ライフが満タンの状態でエリアに入った際のみ、加速バフを得られる

C#

public virtual bool OnExit(KCCContext context, KCCProcessorInfo processorInfo) => true;
  • KCCがコライダーとの衝突を停止した際に呼び出されます。
  • 戻り値によって、インタラクションを終了するかを制御できます。
    • 特定の条件を満たすまで、インタラクション停止を遅延させることもできます。(trueを返すまで、KCCへの登録が維持される)
    • 例:エリアに入ったプレイヤーには減速デバフを与えるが、プレイヤーのライフが満タンになるまでデバフは解除されない(プレイヤーがエリア内にいるかどうかは問わない)

ステージ

ステージは、Processorで実行される特定のメソッド呼び出しのシーケンスです。インターフェース型によって、一意に識別されます。

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. 衝突しているジオメトリを検知する
        // 2. 未適用の移動に基づいて、キャラクターを上方へ押し上げる
    }
}

デフォルトのProcessor

以下の機能は個別に実装されているため、削除したり別の実装に置換したりすることが簡単にできます。

Environment Processor

  • KCCアドオンに同梱されているデフォルトProcessor
  • 「接地」「空中」状態の挙動を定義
  • 地面の接線方向へ投影した移動
  • シンプルな加速度と摩擦モデル
  • 重力のカスタマイズ
  • ジャンプの倍率
  • IBeforeMoveステージの実装 - KCCData.DynamicVelocity/KCCData.KinematicVelocityの計算に使用されます
  • IAfterMoveStepステージの実装 - 各移動ステップ後にプロパティを再計算(例:地面に対するキネマティックな速度の投影)するために使用されます
  • EnvironmentProcessorアセットの場所:Assets\Photon\QuantumAddons\KCC\AssetDB\Processors
Environment Processor
Environment Processor

キャラクターの速度は、このProcessorで定義されます。シーンオブジェクトに使用することで、水・泥・氷上など、様々な環境の挙動をシミュレートできます。

Step Up Processor

  • 階段(一定の高さに歩行可能な面を持ち、水平移動を遮断するジオメトリ)の検知
  • 階段を検知すると、KCCは接地するまで上方に移動する
  • Step Heightで階段の最大の高さを定義
  • Step Depthによって前方の階段まで距離を定義
  • 上方移動量 = 未適用の水平移動量
  • 上方移動速度は、水平速度を補償するためにStep Speedで乗算される
  • StepUpProcessorプレハブの場所:Assets\Photon\QuantumAddons\KCC\AssetDB\Processors
Step-Up processor
Step-Up Processor

以下の画像に階段の検知プロセスを示します。

Step up process
階段の検知プロセス
  1. キャラクターの水平方向で障害物に阻まれた際に上方をチェックする
  2. キャラクター前方の空間に障害物がないかをチェックする
  3. 地面が歩行可能ならスナップする
  4. 上記3つのチェックが通ったら、キャラクターを上方へ移動する

Ground Snap Processor

  • 地面との接触を失った(階段や凹凸地形)場合に、接地状態を維持する
  • 重力のみでは不十分な場合、キャラクターを地面に近づける
  • Snap Distanceで最大スナップ距離を定義
  • Snap Speedで地面への最大速度を定義
  • GroundSnapProcessorプレハブの場所:Assets\Photon\QuantumAddons\KCC\AssetDB\Processors
Ground snap processor
Ground Snap Processor

以下の画像に地面へのスナッププロセスを示します。

Ground snap process
地面へのスナッププロセス

キャラクターは、以下いずれかの条件が満たされるまで、実際に下方へ押し下げられます。

  1. キャラクターが歩行可能な地面に接触した場合、KCCは接地状態を維持し地面に向かって移動する
  2. キャラクターが歩行不可能な表面に接触して滑ることもできない場合、KCCは接地状態を失う
  3. Snap Distanceに到達した場合、KCCは接地状態を失う
Back to top