【Unity】コライダーが貫通するのでRigidbodyのMassで解決した。
よくあるコライダーが貫通するやつ
今製作しているフォークリフトのゲーム。ほぼ完成に近づいたんですが、ひとつずっと放置してた問題がありまして、無茶な操作をした時にリフトの爪がパレットを突き抜けることがよくありました。
フォークリフトゲームとしては致命的…
リアルのリフトでやったら超問題になるくらいの操作をしていると爪がパレットを貫通してしまいます。
パレットの形状が複雑なせいなのかと思いましたが、ただのcubeでも似たような状況に。
貫通する原因
こういったコライダーの衝突にて動きの速いオブジェクトがすり抜けてしまう問題がありますが、今回はそんなに早い移動をするものはありません。
むしろゆっくり…
というわけでRigidbodyの値から見直していこうと思って一発目で怪しいところ発見しました。↓
リフトについているRigidbodyなんですがMassが3000になっていました。
なんだこの数値は?と思いきや、実はこれ本物のフォークリフトの重量を参考にしています。
変わってパレットのRigidbody↓
パレットはMassが13に。これも実際のパレットの重量を参考にしています。
この値が原因かな?と思ってリフト側のMassを下げたんですが、リフトは複雑な構造になっているので他の動作にも影響が出てしまいました。
ということでパレット側のMassをいじってみます。↓
パレットのMass値を上げていくことで貫通問題は解決できました!
Massで解決
今までRigidbodyのMassを触ることはあまりなかったのですが、物理演算を必要とするゲームに関してはこのあたりの値はしっかり設定したほうがよさそうですね。
リフトとパレットのRididbodyにちゃんとした値いれたはずだからオッケーと思っていたんですがとんだ落とし穴でした。
Massは質量であり、重量ではないのでここら辺は探りながら値を決めてくしかなさそうですね。今回の場合は基本となるのがリフトなのでそこに合わせて他のRigidbodyのMassを設定していくという感じで無事に貫通問題を解決できました。