试图在Unity中禁止横向和反向冲刺

时间:2019-05-18 14:24:22

标签: c# unity3d

我在一个可以四处走动的世界中有一个球员。当玩家按下shift键时,速度会增加。我有一种检查冲刺的方法,但是我使用的if似乎不起作用。玩家可以向任何方向冲刺。

void CheckForSprint()
{
    if (Input.GetKeyDown(KeyCode.LeftShift) && !Input.GetKeyDown(KeyCode.S) && !Input.GetKeyDown(KeyCode.A) && !Input.GetKeyDown(KeyCode.D))
    {
        speed = 6;
    }

    if (Input.GetKeyUp(KeyCode.LeftShift))
    {
        speed = 3;
    }
}

1 个答案:

答案 0 :(得分:0)

使用您在问题中添加的代码。

您提到键“ A”,“ S”和“ D”,但不包括“ W”。我相信您会尝试以6速度移动角色,以防玩家按下LeftShift(可能是您的运行按钮)和W,但会忽略LeftShift,以防它向左移动,向右或向后移动(它只会以3的速度移动)。

如果是这种情况,并且您想在按WSD的情况下以速度3移动,则应该改用Input.GetButton GetButtonDown中的。原因:

  • GetButton :在按住buttonName标识的虚拟按钮时返回true。
  • GetButtonDown :在用户按下由buttonName标识的虚拟按钮的帧中,返回true。

因此,GetButtonDown仅在用户按下键的帧期间返回true。但持有时会忽略。选中this

因此,请尝试以这种方式编写条件:

if (Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.S) && !Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.D))
{
    speed = 6;
} else {
    speed = 3;
}