Ist es wirklich falsch zu verwenden, Input.GetKey() auf FixedUpdate?
Wissen wir, es gibt eine "Regel", dass Input
Funktionen sollten nicht verwendet werden, innerhalb der FixedUpdate()
; Input.GetKeyDown()
kann nicht funktionieren, wenn wir das so machen, aber ist es wirklich falsch zu verwenden Input.GetKey()
?
Sagen wir, wir wollen Feuer etwas bei drücken und halten einer Taste mit einer bestimmten rate, die nicht abhängig von der hardware-Leistung. Ich don ' T wollen, erstellen Sie eine Logik für die Steuerung dieses mit delta-time oder schreiben key detection code in Update
- und Brand-code in FixedUpdate
.
Nicht sinnvoll ist, tun Sie einfach alles, was sich in FixedUpdate
? Was passieren kann - wir verlieren einige-Taste gedrückt Ereignisse, die diejenigen, die wir nicht wollen, sowieso, um unsere gewünschte rate.
Aber was ist, wenn ein einziges wichtiges Ereignis passiert, können wir es verlieren? Gibt es einen reset nach Update
, so dass wir nicht sehen, es auf FixedUpdate
?
InformationsquelleAutor Roberto | 2013-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der
GetKeyDown
docs:Also ja, der Input-Status zurückgesetzt wird jeder frame Bedeutung der hardware wird eine Wirkung haben, je nachdem, wie Häufig
Update
feuert zwischenFixedUpdate
.Es ist wirklich nicht eine einfache Möglichkeit, zu vermeiden, erstellen Sie eine Kopie der Eingabe, die verwendet wird, durch die FixedUpdate, obwohl ich würde vorschlagen, das neubewerten Sie Ihre Logik, um die Dinge bewegen sich in
Update
.Update:
Bezüglich Rutter ' s Kommentar unten. Ich habe gerade festgestellt, die OP war zu Fragen
GetKey()
, was ich schrieb überGetKeyDown()
gilt fürGetKey()
obwohl die Dokumentation nicht explizit so sagen.Dies kann überprüft werden, indem Sie in der Zeit-Manager und die änderung der FixedUpdate-rate auf einige lange Intervall von 1 Sekunde. Dann tun Sie etwas wie:
Wenn Sie drücken und loslassen " D " zwischen dem 1 zweite Feste frames sehen Sie nur "Keine Taste gedrückt".
GetKeyDown()
, aber in meiner ErfahrungGetKey()
wurde in Ordnung. Hat sich das geändert in den letzten Versionen?Danke für den Hinweis hin, dass ich angesprochen die falsche Funktion, siehe mein update. Ich vermute, dass es ist nicht etwas, das Sie würde bemerken, mit der Standard-0,02 s (fixed rate seit
GetKey
ist für die kontinuierliche Taste drückt.Danke, das ist ein gutes experiment, um zu beweisen, dass GetKey() zurückgesetzt wird, jeder frame, auch in der Dokumentation nicht explizit so sagen.
"Wenn Sie drücken und loslassen" D " zwischen dem 1 zweite Feste frames sehen Sie nur "Keine Taste gedrückt" - Das gleiche gilt, wenn Sie Lesen es in der Update - wenn die Taste gedrückt wird, zwischen den Rahmen, den Sie nicht fangen. Da die FPS von
Update()
ist variabler alsFixedUpdate()
dies klingt eigentlich wie ein Grund, es zu tun inFixedUpdate()
...Zweifelhaft. Zwingen
Update
zu schlafen, zu simulieren langsame framerate zeigt Tastatur-Eingaben immer in der Warteschlange im hintergrund. Selbst wenn das nicht der Fall war, ein-gespült wird zwischen frames und nichts garantiert, dassFixedUpdate
laufen in einem bestimmten frame in der Erwägung, dassUpdate
garantiert wird, einmal pro frame. BedeutungFixedUpdate
sollte nicht für die Eingabe verwendet werden.InformationsquelleAutor Jerdak
Meiner Erfahrung, Update kommt bei frame-Zeit, im Gegensatz zu Update Behoben werden, die auftreten können, die mehrere Male pro frame. Darüber hinaus ist Die Physik der Objekte, die tatsächlich aktualisiert werden, bevor FixedUpdate() aufgerufen wird, das heißt, es könnte eine Verzögerung auf der Grundlage der Komplexität der Szene.
Ich glaube, der Eingang ist tatsächlich ausgestrahlt pro-frame, also wenn die FixedUpdate() ist hinter und muss aufholen, indem er mehrmals die Input-check schlägt fehl.
Zusätzliche Ressourcen:
http://answers.unity3d.com/questions/10993/whats-the-difference-between-update-and-fixedupdat.html
InformationsquelleAutor 10001110101