メッシュコライダーでは、衝突が正確に行われるようにゲームオブジェクトのメッシュを適切に設定する必要があります。
メッシュへの読み取り/書き込みを可能にすることを必要とする、特定の設定と最適化が存在します。この場合の “読み取り/書き込み” の意味の詳細については、Mesh API プロパティ Mesh.isReadable に関するドキュメントを参照してください。
以下のいずれかの状況が true の場合、メッシュは読み取り/書き込み可能であることが必要です。
メッシュの読み取り/書き込みを有効にするには、メッシュの Mesh.isReadable 値が true に設定されていることが必要です。エディターから適用するには、次の手順を行います。
メッシュコライダーとの衝突を計算するには、物理演算システムがメッシュのジオメトリにアクセスできる必要があります。“メッシュの調整” とは、3D メッシュを元の形式 (例: FBX や OBJ) から物理演算システムが読み取り可能な形式に変換するプロセスのことです。調整プロセスでは、Raw のメッシュデータを取得し、Unity が物理演算クエリにより迅速に応答できるように空間検索構造を構築します。
メッシュの調整は、Import Settings (Import Settings > Model > Generate Colliders) またはランタイムにトリガーできます。
メッシュの調整プロセス中に、Unity はメッシュのサイズと複雑さを軽減するためにさまざまな最適化を適用できます (例: 冗長な頂点の削除、重なっている三角形のマージ、三角形の数を減らすためのジオメトリの簡素化)。その後、Unity は最適化されたメッシュをより迅速かつ効率的にロードできるため、メモリ使用量が減り、全体的なパフォーマンスが向上します。
実行する最適化をコントロールするには、メッシュコライダーの Cooking Options プロパティを使用します (C# enum MeshColliderCookingOptionsに対応)。使用可能なさまざまな調整オプションの概要については、Mesh collider コンポーネントのリファレンスを参照してください。
デフォルトの Cooking Options は、エディターで調整し、ランタイムに再調整しないメッシュコライダーに適しています。また、ランタイムに必要なほとんどのメッシュコライダーにも適しています (特に、1 回だけ調整する必要がある大きなメッシュや複雑なメッシュ)。ただし、ランタイムに衝突ジオメトリを素早く生成する必要がある場合は、Cooking Options を変更してコライダーの生成を高速化することが必要になる可能性があります (例: プロシージャルのサーフェス。プレイヤーの動作に反応してデフォームするメッシュコライダー)。
Unity がランタイムに生成するメッシュのメッシュ調整を最適化するには、データクリーニングステップを無効にします (Enable Mesh Cleaning と Weld Co-Located Vertices)。ただし、データクリーニングステップを無効にする場合は、メッシュデータを検証する別の方法を用意して、それらのアルゴリズムでクリーニングされるデータを使用しないようにする必要があります。
Cook For Faster Simulation を無効にして、メモリ使用量を節約することもできます。
Cooking Options を変更する場合は、メッシュに読み取り/書き込みアクセス権を適用する必要があります。この方法については、メッシュへの読み取りと書き込みアクセスを許可するを参照してください。
メッシュが物理演算の計算に関するデータを提供することのみを必要とし、レンダリングに関するデータを提供することは必要としない場合 (例: 個別のコライダーの場合)、メッシュの法線をインポートする必要はありません。法線が配置されていないメッシュは、必要なメモリとディスクスペースが少なくて済みます。
法線を無効にするには、以下の手順を行います。