Ansatz: Höhere Simulationsrate
Ihr Timing für Ihre Benutzeroberfläche sollte von Ihrer eigentlichen Spieleschleife entkoppelt sein, ebenso wie Ihr Rendering. Nehmen wir zum Beispiel an, Ihre Welt läuft mit vierfacher Geschwindigkeit. Nehmen wir an, dass Ihr Spiel bei Ihrer Grundgeschwindigkeit (1x) 30 Updates pro Sekunde ausführt.
Wenn Sie sich im Schnellvorlaufmodus befinden, haben Sie dann etwa Folgendes:
- World Logic führt für jedes Update der Benutzeroberfläche und des Renderers 4 Updates durch. Dies bedeutet, dass 120 Updates pro Sekunde ausgeführt werden müssen. So Ihre Welt Modell wird (Daten) mit dieser Rate aktualisiert.
- Renderer- und Benutzeroberflächenlogik rufen weiterhin ab oder führen mit 30 Aktualisierungen pro Sekunde eine beliebige Aktion aus.
Mit anderen Worten, das Spiel läuft insgesamt nicht schneller. Der Simulationsteil ist.
Daraus können Sie zwei Dinge ableiten:
Sie benötigen eine Spiellogik einfach genug zu halten , dass Sie kann es leicht viermal schneller auf Ihrer Zielplattform laufen, oder Sie müssen Methoden einzuführen verschiedene Aspekte des Spiels schneller zu extrapolieren - dies zur Folge haben kann, wenn auch in einem Modell , das ist unterscheidet sich von dem, was es gewesen wäre, wenn Sie einfach eine schnellere Simulation verwendet hätten. Der Kompromiss wären also die Verarbeitungskosten für die Genauigkeit. Siehe Ansatz 2 unten.
Es ist die Trennung von Bedenken, die es Ihnen ermöglicht, Ihre Weltsimulation auf einfache Weise zu beschleunigen, wobei diese Trennung Modell, Ansicht und Steuerung ( MVC ) ist. Wenn Ihre Weltdaten (M), Renderlogik (V) und Spiellogik (C) verwechselt sind, können Sie dies wirklich nicht, zumindest nicht ohne massive Migräne.
Ansatz: Hochrechnung auf Basis von Zeitdeltas
Wie oben erwähnt, müssen Sie die Bewegung basierend darauf berechnen, wie weit sich etwas in einer bestimmten Zeit bewegt hätte. Dies setzt jedoch voraus, dass Ihre Spielphysik in ihrer Simulation von Natur aus realistischer ist, was möglicherweise nicht der Fall ist. Dies ist ein etwas größeres und wesentlich komplexeres Thema. Sie müssen mehr Fragen stellen, wenn Sie wissen möchten. Im Wesentlichen werden Sie einige Berechnungen durchführen, um die Dinge richtig zu machen. Sie müssen sich mit der gegenseitigen Durchdringung bei Kollisionen und vielen anderen Problemen befassen, auf die ich hier nicht näher eingehen werde.
Schlussfolgern
Dies gibt Ihnen den allgemeinen Überblick. Ihre Sprachauswahl ist Ihre eigene, vermutlich wissen Sie entweder, wie Sie das in Unity tun, oder Sie tun es nicht. Wenn Sie das Timing in einer beliebigen Sprache durchführen möchten, müssen Sie die Vor- und Nachteile im Detail verstehen. Ich empfehle, mit den Artikeln von Gaffer zu beginnen und die Unity-API-Dokumente zu lesen.