Unity3d圆形碰撞器:如何旋转游戏对象但不旋转碰撞器

Unity3d圆形碰撞器:如何旋转游戏对象但不旋转碰撞器,unity3d,Unity3d,我有一个连接了CircleCollider2D的游戏对象。当碰撞器撞到另一个碰撞器时,游戏对象开始移动和旋转,它已连接Rigidbody2d。我不需要旋转这个游戏对象,而是旋转另一个游戏对象,旋转的力与碰撞后计算的碰撞器和刚体的力完全相同。这个方法行得通吗?:将碰撞器放在一个不可见的子对象上。然后,LateUpdate中的每一帧都会更新,因此会延迟,但在渲染之前,请执行以下切换:将父对象移动到子对象已移动到的位置,以包括旋转,然后重置子对象:将其局部位置置为零,并将其世界旋转置为与刚才相同的位置

我有一个连接了CircleCollider2D的游戏对象。当碰撞器撞到另一个碰撞器时,游戏对象开始移动和旋转,它已连接Rigidbody2d。我不需要旋转这个游戏对象,而是旋转另一个游戏对象,旋转的力与碰撞后计算的碰撞器和刚体的力完全相同。

这个方法行得通吗?:将碰撞器放在一个不可见的子对象上。然后,LateUpdate中的每一帧都会更新,因此会延迟,但在渲染之前,请执行以下切换:将父对象移动到子对象已移动到的位置,以包括旋转,然后重置子对象:将其局部位置置为零,并将其世界旋转置为与刚才相同的位置

像这样:

void LateUpdate()
{
    Transform child = transform.GetChild(0);
    Quaternion oldRotation = transform.rotation;
    // Take the collider object's position/rotation
    transform.rotation = child.rotation;
    transform.position = child.position;
    // Restore the child's position to be at the same place as the parent
    child.localPosition = Vector3.zero;
    // Leave the child's rotation what it originally was:
    child.rotation = oldRotation;
}

我现在看到的一个问题是,这可能会产生有趣的动力。我不确定。我不知道这样移动/旋转一个物理物体的效果。您可能想使用Rigidbody.position=和Rigidbody.rotation=在为家长偷取孩子的状态后更新孩子的状态。

我有一些想法,但首先,我还没有完成2D游戏,所以您能告诉我碰撞器旋转的方向吗?它是保持平直,只是旋转,还是滚动并离开它的平面?@piojo带有碰撞器的游戏对象只在Z维旋转。它开始在X和Y维度上移动。因此,在与另一个对撞机碰撞后,游戏对象开始移动和旋转刚体的阻力和速度属性我不确定我是否理解这个问题,你能不能把CircleCollider2D放在一个空的游戏对象上,然后把你的游戏对象和刚体一起作为它的子对象?@AdamH听起来他想让对撞机/刚体给游戏对象带来旋转,而不是旋转本身。我的答案是让游戏对象从物理对象窃取旋转/位置,然后重置物理对象的旋转。虽然我不知道他为什么不想让物理物体旋转,因为它无论如何都是看不见的。@George既然我提到了它,你为什么不想让对撞机旋转?圆具有旋转对称性,加上碰撞器甚至不可见。这有算法上的需要吗,还是我们都误解了?