如何使用Rigidbody将旋转应用于父级孩子?

时间:2018-10-01 17:07:21

标签: unity3d rotation physics collision angle

我有一个手指对象。它只是代表手指部分的三个立方体。 第二个多维数据集是第一个多维数据集的子级。第三个立方体是第二个立方体的子代。

这是层次结构:Cube1 -> Cube2 -> Cube3

我的目标是将旋转角度应用于第一个多维数据集,然后让其他多维数据集在本地执行相同的操作。

示例:对第一个多维数据集应用Z轴旋转30度,对第二个多维数据集以及第三个立方体卡以30度Z旋转。 这将使手指看起来像这样: enter image description here

(如果它看起来不像手指,请原谅我) 在每个Update()框架中,我都会更改角度(只是一个数字),它将为我旋转每个立方体。

我的问题是:

如何使所有这些立方体与其他对象正确碰撞?

我尝试将Rigidbody放在所有对象上并设置isKinematic = false,因为我想自己对其进行转换。但是我仍然不能使用transform.rotation来更新旋转,因为它很容易错过与球的碰撞(特别是指尖,因为它移动得比其他零件快)。连续检测无济于事。

所以我尝试使用rigidbody.MoveRotation()rigidbody.MovePosition()来代替,这很痛苦,因为它们需要绝对值。他们工作了,但是当我快速改变角度时,动画是如此的跳跃。 我猜动画是跳动的,因为有很多刚体,或者是当我使用MoveRotation()MovePosition()时,物理引擎无法正确插值每个框的位置。

我还需要使用MovePosition(),因为当我仅使用child.MoveRotation(transform.parent.rotation * originalChildLocalRotation * Quaternion.Euler(0, 0, angle))时,位置不会相对于父项移动。因此,我也必须每帧计算child.MovePosition(parent.TransformPoint(originalLocalPositionOfTheChild))

0 个答案:

没有答案