【Unity】RigidBody2DのCenter of Massが0になる問題

Unity

 

ゲーム制作中にRigidBody2DのCenterOfMassが0になる問題が発生したのでメモを残しておく。

 

結論

 

ColliderのisTriggerが有効になっていると計算されない

 

isTriggerが有効だと…

 

Local Center of Massが(0,0)になっている。

 

isTriggerを無効にすると…

 

計算された値になる!!

 

そもそもCenter of Massって?

RigidBody2D.centerOfMassのスクリプトリファレンスによると以下の通り

 

ローカル空間でのリジッドボディの質量の重心

 

名前の通り、Mass(質量)の、Center(中心)。つまり重心。

 

じゃあこれってなにで決まるの?という話なんだが、2Dじゃない3D用のただのRigidBodyのcenterOfMassのスクリプトリファレンスにヒントがあった。

RigidBody.centerOfMassのスクリプトリファレンスの記述は以下の通り。

 

Transform の原点に対する質量の中心

 

ほほうほうほう。

つまり、Colliderをもとに重心が計算されているらしい。

それを知ると、Colliderの設定が重心の計算に影響を及ぼすのも納得できる。

 

今回は、isTriggerが直接の原因だったが、似たような問題でRigidBody.centerOfMassの記述は参考になりそう。

RigidBody2Dのほうもしっかり書いといてくれよ…。

 

今後2Dのコンポーネントでなにかあったら3Dのほうも読んでみるのは大事だなと思った。

 

参考

Rigidbody2D-centerOfMass - Unity スクリプトリファレンス
ローカル空間でのリジッドボディの質量の中心
Rigidbody-centerOfMass - Unity スクリプトリファレンス
Transform の原点に対する質量の中心