关于这个问题的关注。
因此,如果您在Unity中创建一个空白项目,请创建以下代码:
if(Input.GetKey(KeyCode.RightArrow)){
Debug.Log("rightdown");
}
if(Input.GetKey(KeyCode.LeftArrow)){
Debug.Log("leftdown");
}
甚至可能更进一步并在其中放置一些GetKeyUp
函数,您会注意到无论何时场景发生变化,无论是重新加载还是加载不同的场景,只有一个关键状态会延续,没有关键是按下什么键。正如您可能想象的那样,这对于我的项目来说是非常有问题的,这需要更改场景,并且如果按下多个键,则将其转移。如果你愿意,我已经尝试添加'过滤器',如下所示:
if (Input.GetKeyDown(KeyCode.UpArrow))
{
moveUp = true;
}
if (Input.GetKeyUp(KeyCode.UpArrow))
{
moveUp = false;
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
moveRight = true;
}
if (Input.GetKeyUp(KeyCode.RightArrow))
{
moveRight = false;
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
moveDown = true;
}
if (Input.GetKeyUp(KeyCode.DownArrow))
{
moveDown = false;
}
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
moveLeft = true;
}
if (Input.GetKeyUp(KeyCode.LeftArrow))
{
moveLeft = false;
}
哪种方式有效,因为使用的变量是statics
,所以它们会继续存在。但是,当场景发生变化时,Unity'杀死/减少'的键也不会触发GetKeyUp
状态。因此,除非您释放并重新按下键,否则移动变量将保持为真。
如果您需要更多解释,请与我们联系。我正以这个结束我的智慧。请不要建议“不要改变场景”或其他东西。我知道这是一个解决方案。我正在寻找解决我的问题。谢谢。
P.S。我已经向Unity提交了一份有关此问题的错误报告。根据我发现的一些论坛帖子,包括Stack Overflow本身,这个问题自2003年以来一直存在(我发现这个问题的第一篇文章)。 这是一篇文章:
http://answers.unity3d.com/questions/414388/inputgetbutton-not-working-after-i-change-scenes.html
谢谢所有将要撕掉头发的人。祝好运。 (或者解决方案可能很简单,而且我实际上是迟钝的。我真的很喜欢它,这意味着它已经修复了。)