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

时间:2015-03-05 08:06:51

标签: unity3d

我附加GameObject CircleCollider2D。当Collider击中另一个Collider时,GameObject开始移动和旋转(附加Rigidbody2d)。我不需要旋转这个GameObject,而是使用与击中后计算的力collider& rigidbody完全相同的力来旋转另一个GameObject。

1 个答案:

答案 0 :(得分:0)

这种黑客攻击有效吗?:将对撞机放在子对象上(不可见)。然后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=来更新孩子的状态(在您为父母窃取之后)。