使用具有旋转更改的Addforce吗?

时间:2018-10-08 04:08:11

标签: c# unity3d

我有一个想要不使用W前进的对象(例如here in this video),并且像视频一样,我使用AddForce来做到这一点:

public float forwardForce = 200f;

private void FixedUpdate()
{
     rb.AddForce(forwardForce * Time.deltaTime, 0, 0);
}

但是我希望每次我按下“ A” /“左”时对象都会向左旋转90度(反之亦然,也就是向右),并希望该对象将其推向当前的方向转身。

我是编码的新手,所以请提供帮助。

1 个答案:

答案 0 :(得分:0)

首先,在FixedUpdate中使用Time.deltaTime会产生意外的结果。使用Time.fixedDeltaTime代替它。然后,此代码将执行您想要的操作。

private void Update()
{
    if(Input.GetKeyDown(KeyCode.A)
    {
        transform.Rotate(new Vector3(0, 0, 90), Space.Self);
    }
    else if(Input.GetKeyDown(KeyCode.D)
    {
        transform.Rotate(new Vector3(0, 0, -90), Space.Self);
    }
}

private void FixedUpdate()
{
     rb.AddForce(transform.forward * forwardForce * Time.fixedDeltaTime);
}

但是,如果您使用此方法移动对象,则当您旋转时,它还将继续移动先前的位置。也许您可以通过这种方式修复它。

private void Update()
{
    if(Input.GetKeyDown(KeyCode.A)
    {
        transform.Rotate(new Vector3(0, 0, 90), Space.Self);
        rb.velocity = rb.velocity.magnitude*transform.forward;
    }
    else if(Input.GetKeyDown(KeyCode.D)
    {
        transform.Rotate(new Vector3(0, 0, -90), Space.Self);
        rb.velocity = rb.velocity.magnitude*transform.forward;
    }
}

private void FixedUpdate()
{
     rb.AddForce(transform.forward * forwardForce * Time.fixedDeltaTime);
}