Unity - 如何对角移动

时间:2017-06-13 19:44:56

标签: c# unity3d

我已经定义了向前移动和向左移动。如何对角(左移和上移)?谢谢你的转发。

if (Input.GetKey(KeyCode.W))
    {
        player.MovePosition(transform.position + transform.forward * speed * Time.deltaTime);
    }

    if(Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.A))
    {
        ???
    }

    if (Input.GetKey(KeyCode.A))
    {
        player.MovePosition(transform.position - transform.right * speed * Time.deltaTime);
    }

2 个答案:

答案 0 :(得分:6)

值得注意的是,由于git subtree add的怪癖,您当前的代码无法正常工作 - 它的文档没有提到它,但对于the 2D variant of the method,它和&{} #39;提到了

  

实际位置更改仅在下一次物理更新期间发生,因此重复调用此方法而不等待下一次物理更新将导致使用最后一次调用。

因此,虽然在按下两个键时都会输入两个if语句,但只有最后一个键中的Rigidbody.MovePosition()才会生效。

为了解决这个问题,我的建议是计算一个组合的运动矢量,而不是立即调用MovePosition()。然后,在末尾应用移动向量,因此您只需要调用MovePosition()一次:

MovePosition()

希望这有帮助!如果您有任何问题,请告诉我。

答案 1 :(得分:1)

如果您真的想要保留当前的结构,那么这就是您所需要的:

if(Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.A))
{
    player.MovePosition(transform.position + (transform.forward - transform.right).normalized * speed * Time.deltaTime);
}

Unity支持矢量添加,因此您可以简单地将它们相加。你还需要确保一旦调用if语句,其他人都没有机会检查。

但是,我建议查看http://answers.unity3d.com/questions/566046/diagonal-movement.html以获得更清晰的解决方案。 Gusman是对的,有办法在没有明确定义每个案例的情况下做到这一点。