移動
移動ステップ
単一の移動ステップにおける位置差分の計算には以下の式を用います。
Step Position Delta = (Dynamic Velocity + Kinematic Velocity) * Delta Time + External Delta
Dynamic Velocity
- 外力を累積した速度
- 重力・爆発の衝撃・フォースフィールド・ジャンプパッドなど
- 斜面上のKCCを上方へ押し上げる
- デフォルトのEnvironmentProcessor使用時に関連するAPI- KCCData.DynamicVelocity
- KCC.SetDynamicVelocity()
- KCC.AddExternalForce()
- KCC.AddExternalImpulse()
- KCC.Jump()
 
Kinematic Velocity
- ユーザー入力から計算される制約なしの速度
- 通常はKCCData.InputDirection(エントリーポイント)に基づいて計算される
- 歩行可能な表面上のKCCのみを上方へ押し上げて、急斜面での挙動の乱れを防止する(KCCData.MaxGroundAngleで制御)
- デフォルトのEnvironmentProcessor使用時に関連するAPI- KCCData.KinematicVelocity
- KCC.SetInputDirection()
- KCC.SetKinematicDirection()
- KCC.SetKinematicSpeed()
- KCC.SetKinematicVelocity()
 
External Delta
- 絶対位置オフセット
- 移動ステップ(めり込み解消)終了後の補正に有用
- 関連するAPI
- KCCData.ExternalDelta
- KCC.SetExternalDelta()
 
移動アルゴリズム
KCCのバーチャルカプセルは、常に計算された位置差分によって移動し、その後に重なり合ったコライダーのめり込みを解消します。
- ✅ このアプローチによって、ジオメトリに対する自然な滑りが実現されます。
- ✅ 大抵の場合、単一カプセルの重複計算のみが必要になるため、KCCは非常にパフォーマンスが高いです。
- ❌ 複数のコライダー(通常は角部分)に対して移動する際、結果が乱れることがあります。これは通常、めり込み解消(depenetration)ステップの実行回数を増やすことで解決できます。
連続的衝突判定 (CCD)
キャラクターの移動速度が速すぎる場合(単一ステップの位置差分が半径の75%を超える程度)、ジオメトリを貫通しないように、移動がサブステップに分割されます。
- 移動が、目標速度に基づいた小さいステップに分割されます。
- 単一ステップで移動する最大距離は、半径の25%~75%で、KCC SettingsアセットのCCD Radius Multiplierプロパティで制御されます。
- 大抵のケースでは75%で十分です。ジオメトリを貫通する問題が発生した場合のみ値を下げてください。
- KCC Settingsアセットの- CCD Radius Multiplierを下げる前に、- Max Penetration Steps(めり込み解消の精度)を上げてみてください。
 
    コリジョンのフィルタリング
- 主なフィルターはレイヤーマスクで、 KCC SettingsアセットのCollision Layer Maskプロパティで制御されます。Physics SettingsのLayer Collision Matrixは、KCCでは使用されません。
- KCC.SetIgnoreCollider()を使用することで、静的コライダーやエンティティを明示的に無視できます。
- フィルタリングルールを追加するには、KCCContext.PrepareUserContext()を使用してResolveCollisionデリゲートを設定してください。