Physics2DのQueryContactScene

PS Suite SDKの話。
Physics2Dのサンプルとしてある、Physics2DSample。
その中の、
QueryContactScene(Contact Queryを用いて衝突情報を得るサンプルシーンです。)
について。

このサンプルでは、特定の剛体の衝突を知ること方法の紹介。

使用するのは

PhysicsScene.QueryContact(..)

bool QueryContact (uint index1, uint index2)
2つの剛体の間に衝突があったかどうかの記録を調べる

index1 剛体ペアの一方
index2 剛体ペアのもう一方
戻り値 剛体ペアに衝突があった記録があれば真を返す

indexは剛体のindexなので
sceneBodies[ index ]のindexを使用する。

サンプルでは

184行目からのInitSceneの中で

coll_target1 = numBody;
sceneBodies[numBody] = new PhysicsBody(sceneShapes[2], 1.0f);
//色々設定
numBody++;

202行目から

coll_target1 = numBody;
sceneBodies[numBody] = new PhysicsBody(sceneShapes[2], 1.0f);
//色々設定
numBody++;

278行目のDrawAllBodyの中で

bool isCollision = QueryContact((uint)coll_target1, (uint)coll_target2);
//trueなら色を変えている

といった形で使用している。

補足

PhysicsSceneには

int numPhysicsSolverPair = 0
narrow phase衝突判定により衝突するペア数

PhysicsSolverPair[] solverPair = new PhysicsSolverPair[maxContacts]
シーン中の衝突ペアリスト

がある。
Physics2Dのサンプルでは
DrawAdditionalInfo(..)の中で

for (uint i = 0; i < numPhysicsSolverPair; i++)
{
  //solverPair[ i ].resAなどで衝突点の描画をしている。
}

そして、
PhysicsSolverPairは

uint GetIndexA ()
ペアの剛体Aのインデックスを返す
uint GetIndexB ()
ペアの剛体Bのインデックスを返す

といった関数もあるので、これで特定の剛体の衝突を検出することも可能。
実際に、
QueryContactの中を見ると工夫はしてあるが、
solverPairを使用して結果を返している。