c# - 输入只存储两个值?

标签 c# unity3d input visual-studio-2015 keycode

当按下两个键然后按下第三个键时,都没有松开,Input.GetKeyDown 不知道第三个键已被按下。

这是我的代码:

public class Keys
    {
        internal bool leftPressed = false;
        internal bool rightPressed = false;
        internal bool upPressed = false;
        internal bool downPressed = false;
    }

    public Keys keys = new Keys();

    void Start () {
    }

    void Update ()
    {
        updateButton(KeyCode.LeftArrow);
        updateButton(KeyCode.RightArrow);
        updateButton(KeyCode.UpArrow);
        updateButton(KeyCode.DownArrow);
    }

    void updateButton(KeyCode key)
    {
        if (Input.GetKeyDown(key))
        {
            if (key == KeyCode.LeftArrow)
                keys.leftPressed = true;
            if (key == KeyCode.RightArrow)
                keys.rightPressed = true;
            if (key == KeyCode.UpArrow)
                keys.upPressed = true;
            if (key == KeyCode.DownArrow)
                keys.downPressed = true;
        }
        else if (Input.GetKeyUp(key))
        {
            if (key == KeyCode.LeftArrow)
                keys.leftPressed = false;
            if (key == KeyCode.RightArrow)
                keys.rightPressed = false;
            if (key == KeyCode.UpArrow)
                keys.upPressed = false;
            if (key == KeyCode.DownArrow)
                keys.downPressed = false;
        }
    }

我只想让玩家类在按下某个键时移动游戏对象。如果按下两个方向,它们将相互抵消并将玩家的速度设置为 0。

同时向左和向右敲击会这样做,但尝试向上或向下按下不会改变此时的向上或向下值。好像 Input.GetKeyDown 只包含 2 个值而不是整个键盘键状态?

注意:即使按键盘上的两个随机键也会停止向左、向下、向上或向右更改值。

有人对我的代码有建议或修复吗? 谢谢,

最佳答案

除非我遗漏了什么,否则您最好使用 built in axes system. 此外,您的键盘可能不支持同时按下两个以上的键。 如果按下键,GetKeyDown 也不会返回,如果它在最后一帧被按下,则返回:https://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html

如果您不想使用轴系统,您需要 Input.GetKey 获取键的当前状态。

关于c# - 输入只存储两个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38904944/

相关文章:

android - 统一: Edit Gradle file of Android modules in Unity Assets

javascript - 从用户输入上传图像,传递到ajax,并返回带有响应的图像

actionscript-3 - 在Actionscript中输入正确的声音?

c# - 简单的mysql插入查询给出错误

c# - 使用 TextBox 在 WPF slider 上呈现刻度数

c# - 如何将区分联合从 C# 传递到 F# 函数(F# - C# 互操作)

c# - 在 Unity C# 中实例化游戏对象列表

c# - 编程问题。落后

c# - 如何从 C# 调用 CPU 指令?

Java - 使用输入掩码 xxxxxxx 循环遍历所有输入,其中 x = 0 或 1