C# 输入仅存储两个值?

C# 输入仅存储两个值?,c#,unity3d,input,visual-studio-2015,keycode,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;

按两个键,然后按第三个键(全部不释放),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个值,而不是整个键盘键的状态

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

有人对我的代码有什么建议或修正吗?
谢谢,

除非我遗漏了什么,否则您最好使用 此外,您的键盘可能不支持同时按下两个以上的键。 此外,如果关键点向下,则GetKeyDown不会返回,如果上一帧按下,则返回:


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

除非我遗漏了什么,否则您最好使用
void Start() 
{
    StartCoroutine(crMoveIt());
}

private IEnumerator crMoveIt() 
{
    while(true) // have a bool var for this
    {
        if(Input.GetKeyDown(KeyCode.A)) 
        {
            // Move object here
        }
        yield return null;
    }
}
此外,您的键盘可能不支持同时按下两个以上的键。 此外,如果关键点向下,则GetKeyDown不会返回,如果上一帧按下,则返回:

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

void Start() 
{
    StartCoroutine(crMoveIt());
}

private IEnumerator crMoveIt() 
{
    while(true) // have a bool var for this
    {
        if(Input.GetKeyDown(KeyCode.A)) 
        {
            // Move object here
        }
        yield return null;
    }
}
要将对象移动到的位置,请参见

或者如果你使用刚体,请阅读

与其传入一个键码来检查每一帧,不如让一个协程来处理输入,然后在每一帧之后调用一些东西。协同程序的作用与更新相同,但您可以运行其中几个,而不是只运行一个Update()方法

我当然会为对象的移动编写更多的代码,但是您在示例中没有提供任何游戏对象的引用。不久前我回答了一个问题,该问题显示了如何以不同的方式移动对象,而这里不使用Vector3.MoveToward()

希望这有帮助。编辑,忘记了一些东西。=)

要将对象移动到的位置,请参见

或者如果你使用刚体,请阅读

与其传入一个键码来检查每一帧,不如让一个协程来处理输入,然后在每一帧之后调用一些东西。协同程序的作用与更新相同,但您可以运行其中几个,而不是只运行一个Update()方法

我当然会为对象的移动编写更多的代码,但是您在示例中没有提供任何游戏对象的引用。不久前我回答了一个问题,该问题显示了如何以不同的方式移动对象,而这里不使用Vector3.MoveToward()


希望这有帮助。编辑,忘记了一些东西。=)

我知道代码没有经过优化,我是作为一个小项目来做的,只是为了好玩,然后边做边优化。我知道代码没有经过优化,我是作为一个小项目来做的,只是为了好玩,然后边做边优化。1.这将冻结Unity/Game,除非
返回null在循环时添加到
。2.这并不能回答问题。我想你应该再读一遍。它说的是关于在多个按键上丢弃结果……哈哈,如果你读了我的答案,我提到我没有把代码放在那里,因为没有对对象的引用。此外,我想我确实回答了这个问题。老实说,他处理这件事的方式太过分了。他不需要那里一半的东西。此外,这是一个测试项目。让它冻结,让他找出原因。从错误中学习是最好的。最后,你的主要观点是,我遗漏了一个收益率声明,因为我是在没有统一性的情况下做的,这很重要。如果处理方式不同,他不需要放弃结果。只是我的意见了不起的事是的,这个答案将冻结团结。不管怎样,我建议你把问题再读一遍。如果按下多个键,他不想移动东西。只要阅读它,然后修正你的答案。我想在按下左键、右键、上键或下键时移动游戏对象。我遇到的问题是,当我同时按下左键、右键和上键时,unity只能理解为我按下了左键和右键。Unity不明白我也有压力。我想应该是这样的。只是想一想,你为什么不提供你自己的答案,而不是去追求别人的答案?我建议你再看一遍,包括我的答案。如果他不需要多个输入,他只需要一个关键字。我想我可以在他的代码中使用这个关键词,但我认为另一种方法会更好。无论如何,祝你玩得愉快=)如果你真的认为我的答案那么糟糕,那就删除它或否决它。1.这将冻结Unity/Game,除非
yield return null在循环时添加到
。2.这并不能回答问题。我想你应该再读一遍。它说的是关于在多个按键上丢弃结果……哈哈,如果你读了我的答案,我提到我没有把代码放在那里,因为没有对对象的引用。此外,我想我确实回答了这个问题。老实说,他处理这件事的方式太过分了。他不需要那里一半的东西。此外,这是一个测试项目。让它冻结,让他找出原因。从错误中学习是最好的。最后,你的主要观点是,我遗漏了一个收益率声明,因为我是在没有统一性的情况下做的,这很重要。如果处理方式不同,他不需要放弃结果。只是我的意见了不起的事是的,这个答案将冻结团结。不管怎样,我建议你把问题再读一遍。如果按下多个键,他不想移动东西。只要阅读它,然后修正你的答案。我想在按下左键、右键、上键或下键时移动游戏对象。职业选手