我们知道有一个“规则”,即不应在Input
内部使用FixedUpdate()
函数;如果这样做,Input.GetKeyDown()
可能无法正常工作,但是使用Input.GetKey()
真的错误吗?
假设我们要以不依赖于硬件性能的某种速率按住某个键时触发一些操作。我不想创建逻辑来使用增量时间来控制此逻辑,也不想在ojit_code中编写 key 检测代码并在Update
中编写触发代码。
只在FixedUpdate
中做所有事情没有意义吗?可能发生的事情-我们可能会丢失一些按键事件(无论如何我们都不希望发生),以保持我们想要的速度。
但是,如果发生一个关键事件,我们会丢失吗? FixedUpdate
之后是否有重置,所以我们不会在Update
上看到它吗?
最佳答案
从GetKeyDown
docs:
You need to call this function from the Update function, since the state gets reset each frame
因此,是的,每个帧都会重置Input状态,这意味着硬件将根据
Update
之间FixedUpdate
触发的频率而产生效果。虽然我建议您重新评估将内容移至
Update
的逻辑,但确实没有一种简单的方法来避免创建由FixedUpdate使用的Input的副本。更新:
关于以下Rutter的评论。我只是注意到OP在询问有关
GetKey()
的问题,尽管文档未明确说明,但我对GetKeyDown()
撰写的内容仍然适用于GetKey()
。可以通过进入Time Manager并将FixedUpdate速率更改为较长的间隔(如1秒)来验证这一点。然后执行以下操作:
void FixedUpdate() {
if(Input.GetKey(KeyCode.D)){
Debug.Log("D-Key Down");
} else {
Debug.Log("No key down");
}
}
如果在1秒固定帧之间按下并释放“D”,则只会看到“无键按下”。
关于unity3d - 在FixedUpdate上使用Input.GetKey()真的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259097/