在Unity中使用铰接子项旋转2D GameObject时的奇怪行为

时间:2015-04-15 00:02:12

标签: c# unity3d rotation 2d

两天以上我现在正在努力应对这个看似不可能的问题:我有一个复合GameObject(一个父母,10个孩子),每一个都至少与另一个角度限制和玩家控制的电机相连。按照我的意愿完美地移动。 现在我希望能够翻转它。经过一段时间和许多试验,旋转似乎是保持角度的最佳方式(反转localSpace不尊重它们):

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

但是,如果父母按要求旋转(围绕其Y轴旋转180度),则每个孩子都会翻转但不会绕同一轴旋转,而是围绕他们自己的旋转中心旋转。当铰链试图回到所需位置时,这会产生荒谬的结果。我怎么能解决这个问题? 许多人提前感谢...

3 个答案:

答案 0 :(得分:1)

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

我们甚至可以在2D中围绕Y轴旋转变换,但不是刚体2D,在同一个对象中,它们总是会导致严重的问题。

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

答案 1 :(得分:0)

听起来像儿童GameObjects围绕自己的枢轴而不是父母旋转。我目前没有安装Unity来测试它,但是如果你添加一个空的GameObject作为你父母的孩子(并且具有相同的枢轴点),那么让你所有的其他GameObjects成为这个的孩子,它应该工作

答案 2 :(得分:0)

如果你不必要,你不应该移动或旋转刚体。这将搞乱基础物理计算,物理引擎不会对它感到高兴。相反,您有其他方式与他们互动

  • 施加力,扭矩
  • 应用加速度,角加速度
  • 更改速度,角速度

如果必须移动/旋转对象,还应更新所有铰接对象的位置,旋转,速度和角速度。这并不容易。如果你无法解决,请提供更多细节。