C#输入键,一键单击,因此不会响应按下该键

时间:2018-09-25 16:28:51

标签: c# unity3d input

所以我正在为我的角色创建一个动作脚本,我希望他每按下一个按钮就移动1格,我遇到的问题是,如果我按住按钮,他将不断移动我不希望的位置不想,例如,如果按住不放,我仍然只希望他移动1平方英寸。我已经尝试使用

if (Input.GetKeyDown(KeyCode.W) && WButton == true)
{
    transform.Translate(0, 0, 1);
    WButton = false;
}
if (Input.GetKeyUp(KeyCode.W))
{
    WButton = true;
}

这是什么,当按下W按钮时将其禁用,而当您抬起手指时将其启用。这确实满足了我的要求,但它根本无法很好地工作,例如绝对不够出色,无法在游戏中使用,所以还有其他方法可以实现这一目标。 感谢您的所有帮助, 非常感谢

2 个答案:

答案 0 :(得分:2)

通过您给出的示例,我假设您正在使用Unity3D,对吗? (如果是这样,请考虑在问题中添加 unity3d 标记,以便人们更好地了解您的问题并在StackOverflow的相应部分中找到您的问题。)

您的代码示例似乎正确。可能发生的问题是,您只能从Input class documentation中声明的Update()方法中读取输入值。

如果要从Update()方法内部以外的任何地方调用Input.GetKeyDown()和/或Input.GetKeyUp(),则这些方法将返回不一致/错误的值。

答案 1 :(得分:1)

Input.GetKeyDown仅在您第一次按下按钮时呼叫;因此,您无需使用bool WButton

请参阅Unity3D documentation - Input.GetKeyDown”“您需要从Update函数调用此函数,因为状态会在每帧中重置。在用户释放键并再次按下之前,它不会返回true。 。”

使用此代码:

void Update()
{
    if (Input.GetKeyDown(KeyCode.W))
        transform.Translate(0, 0, 1);
}

希望对您有帮助。