public void informBelongToObj(ContactInfo info) { SCENE_OBJ belongTo = belongToObj; while (belongTo != null) { belongTo.collideAction(info); belongTo = belongTo.belongToObj; } }
public static void collideSceneObjProcess() { SCENE_OBJ A = collideInfo.vertex.belongToObj; //vertex SCENE_OBJ B = collideInfo.surface.belongToObj; //surface //Debug.Log ( "collide occur!!(" + A.transform.name + "," + B.transform.name + ")" + collideInfo.minCollideTime ); newContactA.reset(); newContactB.reset(); newContactA.other = B; newContactB.other = A; newContactA.self = A; newContactB.self = B; //newContactA.coupleContactInfo = newContactB; //newContactB.coupleContactInfo = newContactA; newContactA.blockDirect = collideInfo.surface.normal.direct; newContactB.blockDirect = -newContactA.blockDirect; //record surface newContactA.otherSurface = newContactB.otherSurface = collideInfo.surface; //if surface contact surface record surface bool isSurfaceContact = false; for (int i = 0; i < collideInfo.vertex.normals.Count; i++) { NORMAL normal = collideInfo.vertex.normals[i]; if (normal.direct == -collideInfo.surface.normal.direct) { newContactA.selfSurface = newContactB.selfSurface = normal.surface; isSurfaceContact = true; break; } } //otherwise record vertex if (!isSurfaceContact) { newContactA.selfVertex = newContactB.selfVertex = collideInfo.vertex; } A.collideAction(newContactA); B.collideAction(newContactB); A.informBelongToObj(newContactA); B.informBelongToObj(newContactB); }