複合コライダー は、同じ Rigidbody ゲームオブジェクト上にあるコライダーのコレクションです。
複合コライダーは、まとまって 1 つの Rigidbody コライダーのように動作します。凹形状のために正確なコライダーが必要な場合や、メッシュコライダー ではシミュレーションの計算負荷が大きすぎるモデルには、複合コライダーが役立ちます。
複合コライダーは以下の要素で構成されます。
複合コライダーは、ルートゲームオブジェクト上に 1 つの Rigidbody だけを持つ必要があります。
複合コライダーの作成方法の詳細については、複合コライダーを作成する を参照してください。
上の図では、銃モデル のゲームオブジェクトの親ゲームオブジェクトに Rigidbody がアタッチされています。複数の子ゲームオブジェクトはそれぞれにプリミティブなコライダーを持っています。親の Rigidbody が物理演算の力で動かされると、子コライダーは追従して動きます。プリミティブなコライダーは環境内の他のコライダーと衝突することがあります。親の Rigidbody はこれらの衝突に応じて動きを変更します。
この設定の方が、1 つの Rigidbody と複数のコライダーを含む 1 つのゲームオブジェクトよりも柔軟性が高まります。コライダーが属するゲームオブジェクトがコライダーごとに異なる場合は、各コライダーの Transform を個別に変更できます。ただし、コライダーを再配置するときの Rigidbody の動作を監視する必要があります。コライダーの位置とスケールを変更すると、Rigidbody の質量中心が変わることがあります。その結果、ランタイムに複数のフレームで継続的な変更があると、予期しない動作が発生することがあります。このような場合は、rigidbody.centerOfMass を使用して質量中心を手動で設定できます。
同じ Rigidbody に複数のコライダーをアタッチすると、物理演算システムではコレクション全体が 1 つの Rigidbody として扱われます。コライダータイプ (dynamic または kinematic) は、Rigidbody の設定によって定義されます。
複合コライダーが別のコライダーに触れると、Unity は複合コライダーに属するコライダー別に衝突を登録します。このため、ランタイムに必要な衝突ペアだけが得られるようにコライダーを配置するか、特定のコライダーによって生じる動作をコライダーラベルを使用して決定する必要があります。
ほとんどの場合、複合コライダーは メッシュコライダー と同様のソリューションを提供します。複合コライダーの主な目的は、複雑な形状のアイテムの正確な衝突を発生させることです。複合コライダーの利点と制限を考える際には、複合コライダーをメッシュコライダーと比較することがよくあります。
複合コライダーの主な利点は以下のとおりです。
ただし、複合コライダーにもいくつかの重要な制限があります。
コライダーをどのように設定するのかは、プロジェクトによって異なりますので、各設定をテストし、物理演算プロファイラーを使用して、コライダー設定の効率を把握する必要があります。