Der Aufgabenplaner koordiniert Aufgaben, die in jedem Frame während des Spiels ausgeführt werden, selbst wenn es pausiert ist. Diese Aufgaben umfassen das Erkennen von Spieler-Inputs, das Animieren von Charakteren, das Aktualisieren der Physiksimulation und das Fortsetzen von Skripten im Zustand task.wait().
Obwohl möglicherweise mehrere Aufgaben gleichzeitig ausgeführt werden, kann der Aufgabenplaner in bestimmten Situationen überlastet sein, insbesondere in den folgenden:
- Verwendung eines benutzerdefinierten Charakter-Rigs oder Eingabeschemas.
- Selbstständiges Animieren von Teilen (statt die Animator zu verwenden).
- Starkes Vertrauen auf präzise Physik.
- Regelmäßiges Replizieren von Objekten.
RunService
Der direkteste Weg, um frameweise Aufgaben hinzuzufügen, ist über die folgenden Mitglieder von RunService:
Scheduler-Priorität
Der Aufgabenplaner kategorisiert und erfüllt Aufgaben in folgender Reihenfolge. Einige Aufgaben führen möglicherweise in einem Frame keine Arbeiten aus, während andere mehrfach ausgeführt werden können.
* Die Skriptausführung während RunService.Heartbeat variiert je nach Einstellung von Workspace.SignalBehavior in deinem Spiel. Siehe Aufgeschobene Ereignisse.
Beste Praktiken
Um leistungsstarke Spiele mit Effizienz im Hinterkopf zu erstellen, beachte Folgendes:
Vermeide es, Funktionen an den Render-Schritt zu verbinden/binden, es sei denn, es ist unbedingt notwendig. Nur Aufgaben, die nach der Eingabe, aber vor dem Rendern erledigt werden müssen, sollten auf diese Weise ausgeführt werden, wie z. B. die Kamerabewegung. Für strenge Kontrolle über die Reihenfolge verwende BindToRenderStep() anstelle von PreRender.
Verwalte physikalische Zustände sorgfältig. PreSimulation geschieht vor der Physik, während PostSimulation nach der Physik geschieht. Deshalb sollte die Gameplay-Logik, die den Physikzustand beeinflusst, in PreSimulation erfolgen, wie z. B. das Setzen der Velocity von Teilen. Im Gegensatz dazu sollte die Gameplay-Logik, die auf den Physikzustand angewiesen ist oder darauf reagiert, in PostSimulation behandelt werden, wie z. B. das Lesen der Position von Teilen, um zu erkennen, wann sie definierte Zonen betreten.
Änderungen der Motor6D-Transformation sollten im PreSimulation-Ereignis durchgeführt werden. Andernfalls werden die Änderungen im nächsten Frame von Animators überschrieben. Selbst ohne einen Animator ist PreSimulation das letzte Luau-Ereignis, das ausgelöst wird, bevor Motor6D.Transform auf die Positionen der Teile angewendet wird.