スイープに基づく CCD (連続的衝突判定) は、Continuous モードおよび Continuous Dynamic モードのための CCD (連続的衝突判定) アルゴリズムです。
静的コライダー (Rigidbody を持たないゲームオブジェクト) とのみ衝突する物理ボディには、Continuous を使用します。移動する動的コライダー (動的な Rigidbody を持つゲームオブジェクト) と衝突する物理ボディには、Continuous Dynamic を使用します。
Continuous および Continuous Dynamic は、最も正確な衝突判定モードです。ただし、計算負荷が最も高い処理でもあります。さらに、直線運動の結果として発生する衝突に対してのみ機能します。物理ボディの回転の結果として発生する衝突 (例えば、ピンボールフリッパーがそのピボットで回転するときにボールに衝突するなど) は検出できません。
スイープに基づく CCD は、衝突の可能性を計算するために衝突の瞬間 (Time-Of- Impact、TOI) のアルゴリズムを使用します。これを行うために、アルゴリズムはオブジェクトの現在の速度でオブジェクトの前方の軌道に沿って「スイープ」するか、検出します。
上の画像では、以下を示しています。
オブジェクトの移動方向で接触がある場合、アルゴリズムは衝突の時刻を計算し、その時刻になるまでオブジェクトを動かします。このアルゴリズムは、それ以降のサブステップを実行できます。最も重要なのは、衝突後に速度を再計算し、新しい軌道で再スイープできることです。
上の画像では、以下を示しています。
スイープに基づく CCD は、特にプロジェクトで広く使用されている場合、パフォーマンスに大きな影響を与える可能性があります。スイープに基づく CCD を設定した多数の高速オブジェクトが近接していると、物理エンジンはより多くのスイープと CCD のサブステップを処理する必要があるため、CCD のオーバーヘッドが急速に増加します。
スイープに基づく CCD には、直線 (またはディレクショナル) スイープしか実行できず、角度 (または回転) スイープは実行できないという制限があるため、物理ボディが回転した場合に生じる可能性のある衝突を予測できません。例えば、ピンボールマシンのフリッパーは、一端が固定され、固定点を中心に回転します。回転は角運動のみで、直線運動はありません。オブジェクトの回転も考慮する必要がある場合は、投機的 CCD (連続的衝突判定) を使用します。