使用Vector3.Reflect作为Quaternion弹跳对象

时间:2018-02-16 07:04:27

标签: c# unity3d physics game-physics

所以我遇到这个问题,我试图让子弹在Unity中摆脱障碍。目前我正在使用Vector3.Reflect设置我的对象的Vector3.Forward。

Expected Result vs. Actual Result

我的预期结果是子弹跟随红线。它反弹的每个物体旋转45度,因此子弹应该完全90度反弹。但实际发生的事情是在第二次反弹时,子弹跟随蓝线,从点开始卡在角落里。

    if (data.GenList.length === 0) {
       alert("No items found")
    }

Code example

我认为我的问题要么与返回错误的法线有关,要么是因为我设置的是前向矢量而不是旋转但是我不确定如何将Vector3.Reflect转换成四元数可以理解的东西

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我已经在这个问题上工作了2天,但是一旦我发布了这个问题,我就把它搞清楚了

private void OnCollisionEnter(Collision collision)
{
    //if (collision.collider.tag == "Wall")

        //Store new direction
        Vector3 newDirection = Vector3.Reflect(transform.forward, collision.contacts[0].normal);
        //Rotate bullet to new direction
        transform.rotation = Quaternion.LookRotation(newDirection);

        //add velocity to bullet based on new forward vector
        bulletRigidBody.velocity = transform.forward * bulletSpeed;


}