C# 试图不允许横向和向后的联合短跑

C# 试图不允许横向和向后的联合短跑,c#,unity3d,C#,Unity3d,在这个世界上,我有一个球员可以很好地移动。当玩家按下shift键时,速度增加。我有办法检查sprint,但我使用的if似乎不起作用。运动员可以向任何方向冲刺 void CheckForSprint() { if (Input.GetKeyDown(KeyCode.LeftShift) && !Input.GetKeyDown(KeyCode.S) && !Input.GetKeyDown(KeyCode.A) && !Input.GetKe

在这个世界上,我有一个球员可以很好地移动。当玩家按下shift键时,速度增加。我有办法检查sprint,但我使用的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;
    }
}

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

你提到了A键、S键和D键,但没有包括W键。我相信你会尝试以速度6移动角色,以防玩家按下LeftShift键(可能是你的run按钮)和W键,但忽略LeftShift键,以防它向左、向右或向后移动,然后以速度3移动

如果是这种情况,并且在按下W、S或D时希望以3的速度移动,则应使用Input.GetButton而不是GetButtonDown。原因是:

GetButton:按住buttonName标识的虚拟按钮时返回true。 GetButtonDown:在用户按下buttonName标识的虚拟按钮的帧期间返回true。 因此,GetButtonDown仅在用户按下键的帧期间返回true。但在持有时会忽略。检查

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

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

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

你提到了A键、S键和D键,但没有包括W键。我相信你会尝试以速度6移动角色,以防玩家按下LeftShift键(可能是你的run按钮)和W键,但忽略LeftShift键,以防它向左、向右或向后移动,然后以速度3移动

如果是这种情况,并且在按下W、S或D时希望以3的速度移动,则应使用Input.GetButton而不是GetButtonDown。原因是:

GetButton:按住buttonName标识的虚拟按钮时返回true。 GetButtonDown:在用户按下buttonName标识的虚拟按钮的帧期间返回true。 因此,GetButtonDown仅在用户按下键的帧期间返回true。但在持有时会忽略。检查

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

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

我不确定我是否理解这个问题;玩家只允许在按住W键的情况下冲刺吗?你可能还想在使用速度的地方加入代码。在使用时更改速度可能比在另一个函数中修改速度更有意义;玩家只允许在按住W键的情况下冲刺吗?你可能还想在使用速度的地方加入代码。在使用时更改速度可能比在另一个函数中修改速度更有意义。