我有一个手指对象。它只是代表手指部分的三个立方体。 第二个多维数据集是第一个多维数据集的子级。第三个立方体是第二个立方体的子代。
这是层次结构:Cube1 -> Cube2 -> Cube3
我的目标是将旋转角度应用于第一个多维数据集,然后让其他多维数据集在本地执行相同的操作。
示例:对第一个多维数据集应用Z轴旋转30度,对第二个多维数据集以及第三个立方体卡以30度Z旋转。 这将使手指看起来像这样:
(如果它看起来不像手指,请原谅我) 在每个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))
。