在另一层上与对象的碰撞在Unity中不起作用?

时间:2018-03-06 17:32:10

标签: unity3d collision

我的场景中有两个盒子对撞机。我基本上操纵一个,另一个是静止的,只是在默认层上,它还附有一个刚体。我主要旋转的另一个对象,由于某种原因它直接旋转通过另一个对象。它在另一层,但是,我检查了层碰撞矩阵,并且检查了所有的框,所以我不确定为什么碰撞没有发生。是否有一个原因?

我正在使用transform.Rotate进行旋转。两个碰撞器都没有选择isTrigger。有什么想法吗?

编辑:添加此内容以显示rigidbody.MoveRotation

的实施情况
private void FixedUpdate()
{

    if (Input.GetKey(KeyCode.Y) && !colliding)
    {
        if (rigidBody == null)
        {
            rigidBody = gameObject.AddComponent<Rigidbody>();
            rigidBody.isKinematic = true;
            rigidBody.useGravity = false;
            rigidBody.interpolation = RigidbodyInterpolation.Interpolate;
        }
        rot = Quaternion.Euler(0, .5f, 0);
        rigidBody.MoveRotation(rigidBody.rotation * rot );
    }
    if (Input.GetKey(KeyCode.I) && !colliding)
    {
        if (rigidBody == null)
        {
            rigidBody = gameObject.AddComponent<Rigidbody>();
            rigidBody.isKinematic = true;
            rigidBody.useGravity = false;
            rigidBody.interpolation = RigidbodyInterpolation.Interpolate;
        }
        rot = Quaternion.Euler(0, -.5f, 0);
        rigidBody.MoveRotation(rigidBody.rotation * rot);
    }

    else if (colliding)
    {
        rigidBody.MoveRotation(rigidBody.rotation * Quaternion.Inverse(rot));
    }
}

1 个答案:

答案 0 :(得分:2)

如果通过变换更新任何对象的位置或旋转,则不会发生碰撞。您可以接收OnCollision事件,但如果使用变换旋转或移动,则无法获得所需的结果。更新代码以使用刚体对fixedUpdate中的旋转和位置进行任何更改以接收这些效果,即碰撞。