【Unity】Mesh ColliderのConvexオプションについて
fbxをインポートすると、メッシュ情報からMesh Colliderが作られますよね。
そのMesh Collider同士の衝突判定について、めっちゃハマったお話です。
- メッシュ同士の衝突について
- 衝突したい両方のConvexをオンにしてみた
- Convexをオンにすると、メッシュ通りのコライダにならない
- コライダの形を変えたくない場合はConvexをオフにする
- コライダの形を変えたくないけどMesh Collider同士を衝突させたい
- 結論
メッシュ同士の衝突について
Unityマニュアルに、以下のように記載されています。
上の記事には、Convex がオンとなっているメッシュコライダーは、他のメッシュコライダーと衝突することができます。と書かれてあります。
さっそく、試してみることにしました。
衝突したい両方のConvexをオンにしてみた
これが、思った通りに衝突判定してくれない。
正確に言えば、衝突していないのに起動時に衝突検知し、そのあとは衝突させても検知してくれない。
これで、かなり悩みました。
Convexをオンにすると、メッシュ通りのコライダにならない
ということが判明!!!
下のキャプチャを見てみてください。
VRでイライラ棒を作っていますw
こちらがConvexオフ。
こちらがConvexオン。緑のラインがコライダの形を表しています。
なんと、メッシュの外枠を囲った形になっているではありませんか!!
これのせいで、突き刺さっている棒のコライダが起動時に衝突検知してしまい、そのあとは衝突中判定になっていたのですね。ナンテコッタイ。
コライダの形を簡易化しているってことなのかな。
コライダの形を変えたくない場合はConvexをオフにする
ではどうすれば良いかというと、コライダの形をメッシュ通りにしたいオブジェクトについては、Convexをオフすれば良いようです。
今回は衝突したときに、イライラ棒に電流を流したい(バイブレーションさせる)ので、イライラ棒だけConvexをONにしました。
コライダの形も、まあなんとか。
前後の四角いコライダは、イライラ棒すっぽ抜け検知用です。
コライダの形を変えたくないけどMesh Collider同士を衝突させたい
そんな無茶な要望に応えてくれるアセットもあるようです。しかも無料!!
こちらのサイト様で紹介されていました。
もっと早く気づけばよかった・・・!!
Mesh Colliderを作るのではなく、他のColliderを組み合わせてメッシュと同じ形状を再現してくれるそうです。スバラシイ!!
結論
- メッシュに合わせてコライダを作ってくれる。それがMesh Collider。
- Mesh Collider同士の衝突判定では、Convexをオンにしよう。
- Convexをオンにすると、メッシュ通りのコライダにならないので注意。
- アセットもあるよ!
↑↑↑ ぜひ遊んでみてください!↑↑↑