【问题标题】:C# Input Key, one click, So it doesn't respond to being held downC#输入键,一键点击,所以按住不响应
【发布时间】:2018-09-26 07:51:23
【问题描述】:

所以我正在为我的角色创建一个移动脚本,我希望他每按下一个按钮就移动 1 个方格,我遇到的问题是,如果我按住按钮,他会不断移动,而我没有不想要,例如,如果它被按住,我仍然只希望他移动 1 个方格。我已经尝试过使用

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

它的作用是,当按下 W 按钮时它会禁用它,当你抬起手指时它会启用它。这可以满足我的要求,但它根本不能很好地工作,就像绝对不足以进入游戏一样,所以还有其他方法可以实现这一点。 谢谢大家的帮助, 非常感谢

【问题讨论】:

  • 你使用 Unity3D 吗?
  • 是的,我使用 3d,没有意识到它有什么不同

标签: c# unity3d input


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    Input.GetKeyDown 仅在您第一次按下按钮时调用;所以你不需要使用bool WButton

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

    使用此代码:

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

    希望对你有帮助。

    【讨论】:

    • 谢谢你,我已经做到了,这正是我想要的,也感谢其他人的帮助,我真的很感激
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2023-03-02
    • 2014-05-03
    • 2013-10-13
    相关资源
    最近更新 更多