统一运动

时间:2019-02-22 17:42:16

标签: unity3d

我正在尝试统一制作游戏,并且该游戏使用汽车。我想移动汽车,到目前为止,我可以向前和向后移动它,也可以向左和向右旋转它,这两个移动效果很好。

但是在我将其向右旋转之后,我尝试使其向前移动,因此它沿与以前相同的方向移动,而没有考虑到刚才的转弯。它的移动就像向前旋转一侧一样。我一直尝试使用正向向量的值,但是我的尝试均未取得良好的结果。如果有人有一些好主意,我很想听听他们的想法。

$sql = "SELECT pic, title, address FROM WP_2344432 WHERE pic != ''"; 

后来编辑:我问这个问题的原因是我不知道向量car.forward与我编写的静态向量不同。在评论中的解释之后,我无法理解我做错了什么。

1 个答案:

答案 0 :(得分:1)

您可以使用rb.MovePosition()代替transform.Translate()。它使用Transform而不是Rigidbody来移动对象,也可以重载此方法,并选择何时要相对于空间或自身移动对象,更多here。这是工作版本

public Rigidbody rb;
public Transform car;
public float speed = 17;


Vector3 rotationRight = new Vector3(0, 30, 0);
Vector3 rotationLeft = new Vector3(0, -30, 0);

Vector3 forward = new Vector3(0, 0, 1);
Vector3 backward = new Vector3(0, 0, -1);

void FixedUpdate()
{
    if (Input.GetKey("w"))
    {
        transform.Translate(forward * speed * Time.deltaTime);
    }
    if (Input.GetKey("s"))
    {
        transform.Translate(backward * speed * Time.deltaTime);
    }

    if (Input.GetKey("d"))
    {
        Quaternion deltaRotationRight = Quaternion.Euler(rotationRight * Time.deltaTime);
        rb.MoveRotation(rb.rotation * deltaRotationRight);
    }

    if (Input.GetKey("a"))
    {
        Quaternion deltaRotationLeft = Quaternion.Euler(rotationLeft * Time.deltaTime);
        rb.MoveRotation(rb.rotation * deltaRotationLeft);
    }

}