所以我正在为我的角色创建一个动作脚本,我希望他每按下一个按钮就移动1格,我遇到的问题是,如果我按住按钮,他将不断移动我不希望的位置不想,例如,如果按住不放,我仍然只希望他移动1平方英寸。我已经尝试使用
if (Input.GetKeyDown(KeyCode.W) && WButton == true)
{
transform.Translate(0, 0, 1);
WButton = false;
}
if (Input.GetKeyUp(KeyCode.W))
{
WButton = true;
}
这是什么,当按下W按钮时将其禁用,而当您抬起手指时将其启用。这确实满足了我的要求,但它根本无法很好地工作,例如绝对不够出色,无法在游戏中使用,所以还有其他方法可以实现这一目标。 感谢您的所有帮助, 非常感谢
答案 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);
}
希望对您有帮助。