UnityのCollision Detectionでとんでもなくつまづいた
なんとなくブロック崩しを作ってるんですが。
(Unityのチュートリアルであったから)
チュートリアルの通りに作ってもバー(ボールを跳ね返すやつ)が横の壁をすり抜けるんですよ。
壁にRigidbodyを追加したりいろいろやったんですが、全力ですり抜けやがる。
結局3時間くらい悶絶したあと解決。
1.まず壁のCollisionをBoxColiderからMeshColiderに変更
あとRigidbodyは外すように。
2.バーのCollision DetectionをContinuousに変更
これでうまくいくぅ!
原因はいつものあれだ。
フレームは確か60FPSじゃん。
だからフレームが更新されるその一瞬の隙をついてバーが高速で壁に衝突すると、なんも検知できずにすり抜けるってことやん。
デフォルトはRigidbodyはDiscrete(飛び飛びで衝突検出)になってるんやけどこれをContinuousにするとずーと検知してくれるらしい。たぶん。
一応マニュアル
Unity - Manual: Rigidbody
Continuous Collision Detectionの項目がイケてる
コレ見るとDynamic Continuousてのもあるぽいけど使い分けは以下の通りかと。
・Continuousu
静止しているRigidbodyがないMeshColiderに対して連続検知
Dynamic Continuousu(Rigidbody有)も連続検知
その他はDiscrete検知
・Dynamic Continuous
静止Meshに加えてContinuous or Continuous Dynamicに設定されているRigidbodyに対して連続検知
まぁうん。ちょっとはっきりわからんから動けばどっちでもいんじゃないかな。。
てかやっぱり原文を読むとわかりやすいとき多い。