2017-01-02 4 views
1

Ich mache eine maschinelle Lernsimulation in Unity und ich brauchte nur ein wenig Sicherheit für meine Logik. Alle Physikereignisse passieren in FixedUpdate() und aus dem, was ich verstehe, werden Fluktuationen in der Bildrate meine Ergebnisse nicht beeinflussen, da die korrekte Anzahl von Physikaufrufen in jedem Zyklus gemacht wird (ich setze die Zeitskala lächerlich hoch). Gilt das, wenn die Bildrate wirklich niedrig ist, sagen wir 1-5 fps? Kann ich garantieren, dass die richtige Anzahl von Physikschritten aufgerufen wird, solange ich eine Bildrate von 1 oder höher beibehalten kann?Ausführen einer Unity-Simulation mit sehr niedrigen Frames

Dank

Antwort

1

Sie brauchen nicht einmal eine Framerate von 1 zu haben, für sie zu arbeiten. Die Physikschleife und die Anzeigeschleife (FixedUpdate() vs Update()) sind unabhängig voneinander. Selbst wenn Sie eine Framerate unter 1 FPS haben, sollten Ihre Physik-Updates immer noch korrekt angewendet werden, es werden nur mehrere physikalische Schritte ausgeführt, um "aufzuholen", bevor das nächste Display-Frame gerendert wird. Weitere Informationen über die Reihenfolge, in der die Dinge abgerufen werden, finden Sie unter this article from the unity documentation.

image

+0

ich werde also nie 'verlieren' Physik Schritte? Zum Beispiel, wenn die Zeitskala so hoch eingestellt ist, dass die Leistung meines Computers ein Faktor wird, das heißt, die Zeit, die für den Physik-Schritt zugeteilt ist, reicht nicht aus, um alle Berechnungen durchzuführen? – Amposter

+0

Solange Sie die Position eines 'RigidBody' nicht außerhalb der Physik-Update-Schleife verändern, werden Sie niemals" Physik-Frames "verlieren. Wenn Sie die Position eines Spielobjekts mit einem 'RigidBody' verändern, könnten Sie falsche physikalische Berechnungen erhalten. Erhöhen Sie entweder den Wert von "Maximum Allowed Timestep" im [Zeit-Manager] (https://docs.unity3d.com/Manual/class-TimeManager.html), um der Physik mehr Zeit zum Aufholen oder Neuschreiben Ihres Codes zu geben Bewegen Sie ein 'RigidBody'-Objekt während des Aktualisierungsrahmens ... –

+0

** Wichtiger Hinweis: ** Es muss kein' Update() 'Aufruf sein, der den Umzug verursacht, wenn Sie untergeordnete Objekte mit einem' RigidBody' und Wenn Sie eine Animation auf einem Elternteil haben, können Sie 'RigidBody' während des Animationsupdates bewegen. –

Verwandte Themen