From the GetKeyDown
docs:
You need to call this function from the Update function, since the
state gets reset each frame
So yes, the Input state is reset each frame meaning hardware will have an effect depending on how frequently Update
fires between FixedUpdate
.
There really isn't an easy way to avoid creating a copy of the Input that is used by FixedUpdate, though I would suggest reevaluating your logic to move things in to Update
.
Update:
Regarding Rutter's comment below. I just noticed the OP was asking about GetKey()
, what I wrote about GetKeyDown()
remains true for GetKey()
though the documentation doesn't explicitly say so.
This can be verified by going in to the Time Manager and changing the FixedUpdate rate to some long interval like 1 second. Then do something like:
void FixedUpdate() {
if(Input.GetKey(KeyCode.D)){
Debug.Log("D-Key Down");
} else {
Debug.Log("No key down");
}
}
If you press and release 'D' between the 1 second fixed frames you will only see "No Key Down".
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…