Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 旋转2D游戏对象时的怪异行为与铰接的子对象在一起_C#_Unity3d_Rotation_2d - Fatal编程技术网

C# 旋转2D游戏对象时的怪异行为与铰接的子对象在一起

C# 旋转2D游戏对象时的怪异行为与铰接的子对象在一起,c#,unity3d,rotation,2d,C#,Unity3d,Rotation,2d,两天多来,我一直在努力解决这个看似不可能的问题:我有一个复合的游戏对象(一个父母,10个孩子),每个游戏对象至少通过角度限制和玩家控制的马达铰接在另一个游戏对象上。如我所愿,动作完美。 现在我想把它翻过来。经过一段时间和多次尝试后,旋转似乎是保持角度的最佳方式(反转localSpace不尊重这些角度): 但是,如果父对象按要求旋转(围绕其Y轴旋转180度),则每个子对象都会翻转,但不是围绕同一轴翻转,而是围绕自己的旋转中心翻转。当铰链试图回到所需位置时,这会产生荒谬的结果。我怎样才能解决这个问题

两天多来,我一直在努力解决这个看似不可能的问题:我有一个复合的游戏对象(一个父母,10个孩子),每个游戏对象至少通过角度限制和玩家控制的马达铰接在另一个游戏对象上。如我所愿,动作完美。 现在我想把它翻过来。经过一段时间和多次尝试后,旋转似乎是保持角度的最佳方式(反转localSpace不尊重这些角度):

但是,如果父对象按要求旋转(围绕其Y轴旋转180度),则每个子对象都会翻转,但不是围绕同一轴翻转,而是围绕自己的旋转中心翻转。当铰链试图回到所需位置时,这会产生荒谬的结果。我怎样才能解决这个问题?
非常感谢您的光临……

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

如果你不需要移动或旋转刚体,你不应该移动或旋转它。这将打乱基本的物理计算,物理引擎也不会为此感到高兴。相反,你有其他方式与他们互动

  • 施加力、扭矩
  • 施加加速度,角加速度
  • 改变速度,角速度

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

最后我解决了问题。我的问题没有有价值的解决办法

即使在2D中,我们也可以围绕Y轴旋转变换,但不能旋转刚体2D,因为在同一对象中,刚体2D总是会导致严重问题

这可能是Unity5实现2D的一个不一致之处。
我必须使用localScale反转和编程更新的位置和旋转进行翻转。

嗯,我必须这样做。这是一个2D游戏,我想让我的角色瞬间翻转。我想我会继续更新职位。。。这是一个痛苦的过程,但可能比使用LocalScale反转修改角度要少。
Vector3 rotPoint = new Vector3 (ParentGameObject.transform.position.x, myY, myZ);
ParentGameObject.transform.rotateAround (rotPoint, Vector3.up, 180.0f);