我在一个可以四处走动的世界中有一个球员。当玩家按下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;
}
}
答案 0 :(得分:0)
使用您在问题中添加的代码。
您提到键“ A”,“ S”和“ D”,但不包括“ W”。我相信您会尝试以6速度移动角色,以防玩家按下LeftShift
(可能是您的运行按钮)和W
,但会忽略LeftShift
,以防它向左移动,向右或向后移动(它只会以3的速度移动)。
如果是这种情况,并且您想在按W
,S
或D
的情况下以速度3移动,则应该改用Input.GetButton
GetButtonDown
中的。原因:
因此,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;
}