首页 > 解决方案 > 试图在 Unity 中禁止横向和向后冲刺

问题描述

我有一个可以很好地移动的世界中的玩家。当玩家按下 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;
    }
}

标签: c#unity3d

解决方案


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

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

如果是这种情况,并且您想以 3 的速度移动以防万一W,按SOR D,您应该使用的是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;
}

推荐阅读