LODグループコンポーネントを使って、詳細さの違うメッシュをまとめたオブジェクトにコライダーとRigidbodyを付けてみました。
HDRPのサンプルシーンの床や天井に設置されたライトでは、LODグループコンポーネントを付けたオブジェクトに、各レベルのメッシュがついたオブジェクトが含まれています。
その中には、コライダー用のオブジェクトもあります。
このオブジェクトにはメッシュレンダラーがなく、メッシュフィルターとメッシュコライダーだけが付いています。
メッシュコライダーのMeshには、LOD3よりもポリゴン数の少ないメッシュがアタッチされています。
LODグループを付けたオブジェクトにメッシュコライダーが追加されている場合もあります。
この場合は、メッシュコライダーのために、コライダー用のメッシュでなく、LOD2のメッシュが使われていました。
このようなオブジェクトのセットを、Blenderの猿のメッシュから作ってみました。
Blenderでメッシュのポリゴン数を減らす
まず、Blenderでシフトキー + Aから、Monkeyのメッシュを追加しました。
これに、プロパティからモディファイアを付けます。
Decimateモディファイアで簡単にポリゴン数の少ないメッシュを作れます。
このメッシュの場合、Symmetryのチェックを入れて、X軸に沿って、左右対称に変更を加えるときれいにポリゴン数を減らせました。
オブジェクトモードでオブジェクトを複製し、Ratioを少し下げてポリゴン数の少ないオブジェクトを作りました。
カメラのアイコンの横のプルダウンからApplyをクリックして適用できます。
もとのオブジェクトをもう一度複製して、Ratioをもっと下げたメッシュも作ります。
詳細さに応じて、LOD0~2と名前を変更します。メッシュを変更していないものを「LOD0」、ポリゴン数のもっとも少ないものを「LOD2」にしました。
さらに、Cubeのメッシュを変形して、コライダー用のメッシュも作りました。
これらをFBX形式でエクスポートしました。
UnityでLODグループを付ける
FBXファイルをUnityでインポートしてシーンに配置すると、これらの4つのオブジェクトが、ルートの空のゲームオブジェクトの子になっているのがわかります。
このルートのオブジェクトに「Add Component」ボタンからLODグループコンポーネントを追加します。
そして、LOD0用のオブジェクトを、LODグループコンポーネントの「LOD0」に、LOD1用をLOD1に、とドラッグアンドロップします。
LOD0~2を設定したら、それらの境界をドラッグして、各メッシュが表示される距離の範囲を変更できます。
コライダーを付ける
LODグループを付けたオブジェクトにメッシュコライダーも付けました。
メッシュコライダーにコライダー用のメッシュをアタッチします。コライダー用に作ったオブジェクトを選択してインスペクタを見ると、メッシュフィルターコンポーネントに、コライダー用のメッシュが設定されています。
Projectウィンドウを表示させているときにこの欄をクリックすると、Projectウィンドウでこのメッシュがハイライトされます。
これを、ルートのメッシュコライダーのMeshにドラッグアンドロップします。
コライダー用のオブジェクトのメッシュレンダラーコンポーネントを削除すると、このメッシュは見えなくなります。オブジェクトを削除しても問題ありません。
これで、距離が最も近いときにポリゴン数の最も多いメッシュ、最も遠いときに最も少ないメッシュが表示されます。
その間、各レベルで同じメッシュコライダーが使われています。
リジッドボディを付ける
LODグループとメッシュコライダーに加えて、ルートにリジッドボディコンポーネントも追加しました。Use Gravityのチェックが入っていて、Is Kinematicのチェックが切れていることを確認します。
リジッドボディをメッシュコライダーと併用するときは、メッシュコライダーのConvexにチェックを入れます。
これで、LODグループとコライダー、リジッドボディを併用できました。
LODが自動で切り替わってもコライダーは変わらず、猿のオブジェクトは地面と衝突したり転がったりしています。
ルートでなく、コライダー用のオブジェクトにメッシュコライダーとリジッドボディを付けた場合、コライダー用のオブジェクトだけが落下しました。