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 を読み込みます。この方法の利点は、コライダーの形状をオブジェクトの表示されているメッシュの形状とまったく同じにできるため、より精密で正しい衝突判定ができる事です。ただし、その精密さによって、プリミティブのコライダー (スフィア、ボックス、カプセル) による衝突判定よりも、処理オーバーヘッドが高くなるので、メッシュコライダーは控えめに使った方がよいでしょう。
衝突メッシュの面は片面です。つまり、ゲームオブジェクトは 1 つの方向から衝突メッシュを通り抜けことができますが、他の方向からは衝突することになります。
メッシュコライダーが使用する基本的なアルゴリズムとデータ構造の詳細は PhysX ドキュメント を参照してください。
メッシュの調整は、通常のメッシュを物理エンジンで使用できるメッシュに変更します。調整によって、Physics.Raycast などの物理クエリを空間検索する構造と、接触生成をサポートする構造を構築します。Unity は、すべてのメッシュを衝突検出で使用する前に調整します。これは、インポート時 (Import Settings > Model > Generate Colliders)、またはランタイムに行われます。
実行時にメッシュを生成するとき(例えば、 手続き型サーフェスの場合)、より早く結果を生成するために Cooking Options を設定し、追加のクリーニングのデータクリーニングステップを無効にすると便利です。欠点は、縮退した三角形や同じ場所に配置された頂点を生成する必要がないことですが、クッキングはより速く動作します。
Enable Mesh Cleaning または Weld Colocated Vertices を無効にする場合は、これらのアルゴリズムがフィルタリングするデータを使用していないことを確認する必要があります。 Weld Colocated Vertices を無効にしている場合は、同じ場所に配置された頂点がないことを確認し、 Enable Mesh Cleaning を有効にするときに、面積がゼロに近い小さな三角形、薄い三角形、大きな三角形がないことを確認してください。その面積は無限に近いです。
注意: Cooking Options をデフォルト設定以外の値に設定する場合は、isReadable の値が true のメッシュを使用する必要があります。
メッシュコライダーには、いくつかの制限があります。
Rigidbodyコンポーネントを持つゲームオブジェクトは、 Convex オプションが有効なMesh Collidersのみをサポートします 。 物理演算エンジンは、 凸状のメッシュコライダーしかシミュレートできません。
メッシュコライダーが正しく機能するためには、以下のいずれかの状況でメッシュを読み書き可能にする必要があります。
コライダーに使用されるメッシュジオメトリは変更しないでください。 物理演算エンジンは、メッシュを変更するたびに内部メッシュの衝突加速構造体を再構築する必要があるためです。これにより、パフォーマンスのオーバーヘッドが大幅に増加します。 ランタイムに衝突して変化する必要があるメッシュでは、メッシュ形状をカプセル、球、ボックスなどのプリミティブコライダーで近似する方がよい場合があります。
最適化のヒント メッシュがメッシュコライダーのみに使用される場合は、インポート設定 の 法線 を無効にできます。なぜなら、物理システムでは法線を必要としないためです。
2018.3でMesh Colliderの制限を更新
2018–10–12 修正されたページ
Mesh Cooking Options は 2017.3 で追加NewIn20173
バージョン 2018.1 の更新機能
読み込み/書き込み可能な設定に関する制限を 2017.3 で更新
Inflate Convex Meshは、2018.3 で非推奨に。なぜなら、新しい凸状の計算アルゴリズム (Quickhull) が入力メッシュの不完全さに対してより寛容であるため。