Прошло много времени с тех пор, как я использовал Box2D, но я считаю, что у меня есть решение для вас.
Вы можете создать еще один b2PoligonDef, используя b2PolygonDef.SetAsOrientedBox (он позволяет вам установить центр прямоугольника), и изменять формы, как вы делаете сейчас, приседая и стоя.
Так что, если раньше вы использовали определение крадущегося поля как shapeDef.SetAsBox (1.0, 1.0), теперь вы бы изменили его на что-то вроде shapeDef.SetAsOrientedBox (1, 1, новый b2Vec2 (0, -1)) .
Другим вариантом было бы объявить вершины самостоятельно, чтобы вы могли сделать что-то вроде:
shapeDef.vertexCount = 4;
shapeDef.vertices[0].Set(-0.5, 0);
shapeDef.vertices[1].Set( 0.5, 0);
shapeDef.vertices[2].Set( 0.5, 1);
shapeDef.vertices[3].Set(-0.5, 1);