在 Unity 中使用铰链 children 旋转 2D GameObject 时出现奇怪的行为

Weird behavior when rotating 2D GameObject with hinged children in Unity

两天多以来,我一直在努力解决这个看似不可能解决的问题:我有一个复合游戏对象(一个 parent、10 个 children),每个对象都至少与另一个对象铰接在一起角度限制和 player-controlled 电机。完美如我所愿。 现在我希望能够翻转它。经过一段时间和多次试验,旋转似乎是保持角度的最佳方式(反转 localSpace 不尊重它们):

Vector3 rotPoint = new Vector3 (ParentGameObject.transform.position.x, myY, myZ);
ParentGameObject.transform.rotateAround (rotPoint, Vector3.up, 180.0f);

但是,如果 parent 按要求旋转(绕其 Y 轴旋转 180 度),每个 child 都会翻转但不是围绕同一轴,而是围绕它们自己的旋转中心。当铰链试图回到所需位置时,这会产生荒谬的结果。我该如何解决这个问题? 非常感谢...

听起来 child GameObjects 正在围绕它们自己的枢轴而不是 parent 旋转。我目前还没有安装 Unity 来测试这个,但是如果你添加一个空的游戏对象作为你的 parent 的 child(并且具有相同的枢轴点),然后制作你所有其他的游戏对象child 个,它应该可以工作。

如无必要,您不应移动或旋转刚体。这会搞乱底层的物理计算,物理引擎不会对此感到满意。相反,您可以通过其他方式与他们互动

  • 施加力,扭矩
  • 应用加速,angular加速
  • 改变速度,angular速度

如果您必须 move/rotate 对象,您还应该更新所有铰接对象的位置、旋转、速度、angular 速度。那可不容易。如果您无法解决,请提供更多详细信息。

最后我找到了问题所在。我的问题没有有价值的解决方案。

即使在 2D 中,我们也可以围绕 Y 轴旋转变换,但不是 rigidbody2D,这在同一个对象中总是会导致严重的问题。

这可能是 Unity5 的 2D 实现中剩下的一个不一致之处。 我不得不使用 localScale 反转并以编程方式更新位置和旋转来翻转。