Mesh Collider (メッシュコライダー) は メッシュのアセット からそのメッシュにもとづくコライダーを生成します。複雑なメッシュの場合、プリミティブを使用するよりも遥かに正確に衝突検出できます。Convex (凸状) が有効なっているメッシュコライダーは、他のメッシュコライダーと衝突することができます。
プロパティ | 機能 | |
---|---|---|
Convex | これをチェックすると、Convex (凸状) を有効にします。有効にすると、このメッシュコライダーは他のメッシュコラーダーと衝突可能になります。凸状のメッシュコライダーは、三角形の面の上限数が 255 に制限されます。 | |
Is Trigger | これをチェックすると、Unity はイベントをトリガーするためにこのコライダーを使用し、物理エンジンはこのコライダーを無視します。 | |
Cooking Options | Mesh Cooking オプションを有効または無効にします。このオプションは、物理エンジンがメッシュを処理する方法に影響を与えます。 | |
None | 以下の Cooking Options をすべて無効にします。 | |
Everything | 以下の Cooking Options をすべて有効にします。 | |
Cook for Faster Simulation | 物理エンジンが、高速なシミュレーションに適したメッシュを生成します。これを有効にすると、ランタイムのパフォーマンスに最適なメッシュが得られるように、いくつかの追加ステップが実行されます。これは、物理演算クエリと接触生成のパフォーマンスに影響します。この設定を無効にすると、物理エンジンは処理時間を短くし、できるだけ早く結果を出します。その結果、生成されたメッシュコライダーは最適でない場合があります。 | |
Enable Mesh Cleaning | 物理エンジンが、メッシュをクリーンにします。有効にすると、メッシュの 縮退三角形 や他の幾何学的アーティファクトを削除しようとします。この結果、衝突判定に適したメッシュが得られ、より正確な衝突位置を得られる傾向があります。 | |
Weld Colocated Vertices | 物理エンジンがメッシュ内の等しい頂点を削除します。有効にすると、物理エンジンは同じ位置の頂点を 1 つにまとめます。これは、ランタイムに発生する衝突のフィードバックにとって重要です。 | |
Material | 使用する 物理マテリアル への参照。物理マテリアルによりコライダーが他と衝突したとき、どのように相互作用するかが決定されます。 | |
Mesh | 衝突判定に使用するメッシュ。 |
メッシュコライダーは、ゲームオブジェクトにアタッチされた メッシュ から、コライダーの形状を作成し、コライダーの位置とスケールを正しく設定するために、同じくアタッチされた Transform を読み込みます。この方法の利点は、コライダーの形状をオブジェクトの表示されているメッシュの形状とまったく同じにできるため、より精密で正しい衝突判定ができる事です。しかし、その精密さによって、プリミティブのコライダー (スフィア、ボックス、カプセル) による衝突判定よりも、処理オーバーヘッドが高くなるので、メッシュコライダーは控えめに使った方がよいでしょう。
衝突メッシュの面は一方通行です。つまり、オブジェクトは一方向から通り抜けできますが、他方向からは衝突します。
メッシュの調整は、通常のメッシュを物理エンジンで使用できるメッシュに変更します。調整によって、Physics.Raycast などの物理クエリを空間検索する構造と、接触生成をサポートする構造を構築します。Unity は、すべてのメッシュを衝突検出で使用する前に調整します。これは、インポート時 (Import Settings > Model > Generate Colliders)、またはランタイムに行われます。
ランタイムにメッシュを生成する場合 (例えばプロシージャルなサーフェスの場合)、Cooking Options を利用するとメッシュをより短時間で作成するのに便利です。Cooking Options で生成結果を速くするように設定し、続くクリーニング処理を無効にします。欠点は、縮退三角形や位置を等しくする頂点を避ける必要がありますが、その分、メッシュ調整の時間は短縮されます。
Enable Mesh Cleaning や Weld Colocated Vertices を無効にする場合、それらのアルゴリズムが除外するようなデータを使用しないように気を付ける必要があります。Weld Colocated Vertices が無効になっている場合は、同じ位置をもつ頂点がないことを確認します。Enable Mesh Cleaning が有効な場合は、面積がゼロに近い小さい三角形、細い三角形、面積が無限大に近い巨大な三角形でないことを確認します。
注意: Cooking Options をデフォルト設定以外の値に設定する場合は、isReadable の値が true のメッシュを使用する必要があります。
メッシュコライダーには、いくつかの制限があります。
Convex を有効にしていないメッシュコライダーは、Rigidbody コンポーネントがないゲームオブジェクトでのみサポートされます。メッシュコライダーを Rigidbody コンポーネントに適用するには、Convex チェックボックスをチェックします。
メッシュコライダーが正しく機能するためには、以下のいずれかの状況でメッシュを読み書き可能にする必要があります。
最適化のヒント メッシュがメッシュコライダーのみに使用される場合は、インポート設定 の 法線 を無効にできます。なぜなら、物理システムでは法線を必要としないためです。