C# 输入仅存储两个值?
按两个键,然后按第三个键(全部不释放),Input.GetKeyDown不知道第三个键已按下 这是我的密码: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;
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.这并不能回答问题。我想你应该再读一遍。它说的是关于在多个按键上丢弃结果……哈哈,如果你读了我的答案,我提到我没有把代码放在那里,因为没有对对象的引用。此外,我想我确实回答了这个问题。老实说,他处理这件事的方式太过分了。他不需要那里一半的东西。此外,这是一个测试项目。让它冻结,让他找出原因。从错误中学习是最好的。最后,你的主要观点是,我遗漏了一个收益率声明,因为我是在没有统一性的情况下做的,这很重要。如果处理方式不同,他不需要放弃结果。只是我的意见了不起的事是的,这个答案将冻结团结。不管怎样,我建议你把问题再读一遍。如果按下多个键,他不想移动东西。只要阅读它,然后修正你的答案。我想在按下左键、右键、上键或下键时移动游戏对象。职业选手