Phyiscs2DのCompound(複合形状)について

概要

やりたいのは、複数の剛体を一つにすること。


PS Suite SDKの話。
Physics2Dのサンプルとしてある、Physics2DSample。
その中の、
CompoundScene(複合形状の剛体の生成方法を示したシーンです。)

CreateCompoundScene(基本的な複合形状の剛体を生成するサンプルシーンです。)
について。
Phyiscs2Dの基本(剛体とか)については↓。
Physics2DSampleのPrimitiveSceneのまとめ

やること

static Vector2 MergeBody ( PhysicsBody bodyList, uint indexList, uint num, PhysicsShape sceneShapes, uint map, bool flag = true )

を呼び出すだけ。

bodyList シーンの剛体リスト。PhysicsScene.sceneBodiesを入れればOK
indexList マージするための剛体のインデックスリスト。sceneBodiesのどれをマージするかのリスト。
num マージする剛体の数。
sceneShapes シーンの形状リスト。PhysicsScene.sceneShapesをいれればOK
map コンパウンド形状対応マップ。PhysicsScene.compoundMapをいれればOK
flag 剛体の位置をマージ後に再調整するかどうか。デフォルトでtrue
戻り値 できた複合形状の重心

CreateCompoundSceneでは214行目、272行目あたりから実際に作成をしている。

注意

スタティック剛体

if one of parts is created as a static one, then the final compound rigid body also becomes the static rigid body.

マージする剛体の中に一つでもスタティック剛体がある場合、
できる複合形状もスタティック剛体となる。
記述されてないけど、キネマティック剛体も含まれていると、
スタティック剛体になるみたい(やり方がおかしいだけかもしれないが。)

複合形状の重心

(2012/5/24追記しました。)
(2012/5/25追記しました。)

Please notice that the center of the gravity of the compound rigid body is calculated by the center of the bounding boxy of the compound rigid body.

複合形状の重心はAABBの中心で計算される。(違ってたらごめんなさい。)
つまり、質量も合成されるということ。
追記

Physics2DのCompoundBallance
間違ってないが、計算でずれることがある。
明示的にマージする際に重心を設定してあげることが大事。