移動
移動ステップ
次の式は、1回の移動ステップに対して希望する位置デルタを計算するために使用されます。
Position Delta = (Dynamic Velocity + Kinematic Velocity) * Delta Time + External Delta
Dynamic Velocity
- 外力を蓄積する速度
- 重力、爆発によるインパルス、フォースフィールド、ジャンプパッド
- 坂道でKCCを上に押し上げることができる
KCCData.DynamicVelocity
、KCC.SetDynamicVelocity()
。
Kinematic Velocity
- ユーザー入力のアクションから計算される制約のない速度
- 通常は
KCCData.InputDirection
(入力ポイント)に基づいている。 - 急な斜面でのアーティファクトを防ぐため、歩行可能なサーフェスのみがKCCを押し上げる。
KCCData.KinematicVelocity
、KCC.SetKinematicVelocity()
。
External Delta
- 絶対位置オフセット
-KCCData.ExternalDelta
、KCC.SetExternalDelta()
*外部デルタ - デペネトレーション後のシフトや補正に使用される
KCCは常に移動し、オーバーラップしているコライダーからデペネトレーションします。
- ✅ このアプローチはジオメトリに対して自然なスライディングを与えます。
- ✅ ほとんどの場合、1つのカプセルのオーバーラップが必要であり、KCCを非常に性能の高いものにします。
- ❌ 複数のコライダーに対して移動するとき、ジッターが発生することがあります(通常はいくつかのコーナー)が、これはAnti-Jitter機能によって補正されます。
キャラクターの移動速度が速すぎる場合(1ステップの位置デルタが85%または半径より大きい)、ジオメトリを通過しないように移動がサブステップに分割されます。
これは continuous collision detection (CCD) と呼ばれ、Features セクションで説明されています。
衝突フィルタリング
- 主なフィルターは衝突レイヤーマスクです -
KCCSettings.CollisionLayerMask
プロパティで制御します。Physics Settings のLayer Collision MatrixはKCCでは使用されません。 - 子コライダーはスポーン時にキャッシュされ、無視されます。新しいコライダーが子階層に追加された場合は、
KCC.RefreshChildColliders()
を手動で呼び出す必要があります。 - 追加のフィルタリングルールを適用するために
KCC.ResolveCollision
にデリゲートを登録します。 KCC.IsValidHitCollider()
を使用して、KCCが現在の設定でコライダーと衝突する可能性があるかどうかを検証します。KCC.SetIgnoreCollider()
で特定のコライダーを明示的に無視することができます。コライダーにはNetworkObject
がある必要があります。