Freigeben über


Bewährte Methoden für das Visuelle Skripting für Gitter für die Leistung

Übersicht

Visuelle Skripts sind nicht inhärent langsam, aber sie sind wesentlich langsamer als z. B. C#-Code.

Wenn Sie visuelle Skripts in Ihrer Umgebung erstellen, ist es am besten, sie zu verwenden, um vorhandene Funktionen zu verbinden, nicht für schweres Heben: Kleben, nicht Girder. Die einfachste Möglichkeit, sicherzustellen, dass sich Ihre visuellen Skripts nicht auf die Gesamtleistung Ihrer Umgebung auswirken, besteht darin, sicherzustellen, dass sie überhaupt nicht viel tun.

Ereignisse von Skripts mit hoher und niedriger Häufigkeit

Visual Scripting bietet eine breite Auswahl an Ereignissen, die Sie verwenden können, um visuelle Skriptflüsse auszulösen.

Versuchen Sie, Folgendes zu vermeiden:

  • On Update, On Fixed Update, On Late Update, and similar. Diese Ereignisse lösen sehr häufig (oft mit der gleichen Rate wie Renderframes) aus, und auch wenn Ihr Skript nicht viel tut, hat auch das Starten einen Aufwand, der die Leistung Ihrer Umgebung spürbar beeinträchtigen kann, wenn es an vielen Stellen gleichzeitig geschieht.

  • On Trigger Stay and On Collision Stay. Auch wenn diese Ereignisse nur unter bestimmten Bedingungen aktiv sind (z. B. wenn sich ein Physikobjekt in einem physikalischen Triggervolumen befindet oder einen Kollidierenden berührt), während diese Bedingungen gegeben sind, werden sie sehr häufig ausgelöst.

Es gibt keinen direkten bevorzugten Ersatz für diese Hochfrequenzereignisse. Sie sind nicht deaktiviert, sodass Sie sie verwenden können, wenn sie unbedingt erforderlich sind, aber wir empfehlen, dass Sie versuchen, integrierte Funktionen wie die Animator-Komponente zu nutzen, die von visuellen Skripts gesteuert werden kann, oder Ihre Skriptlogik so umstrukturieren, dass sie reaktiv und nicht aktiv ist, z. B. mithilfe von On State Changed-Ereignissen .

Wenn Sie diese Ereignisse mit hoher Häufigkeit nicht vermeiden können, können Sie deren Auswirkungen möglicherweise verringern, indem Sie die gesamte Skriptcomputerkomponente inaktiv halten, wenn sie nicht benötigt wird. Ein anderes visuelles Skript kann script Machine | Set Enabled verwenden, um ein gesamtes Skriptdiagramm zu deaktivieren und zu aktivieren. Während deaktiviert, löst keiner seiner Ereignisknoten aus, und es hat null Laufzeitkosten.

Diese sind leicht gefährlich für die Leistung, aber manchmal notwendig:

  • Beim Kollisionseintritt und beim Kollisionsausgang. Normalerweise werden diese Ereignisse nur einmal ausgelöst, wenn ein physikalischer Körper den Kollidierenden berührt, und erneut, wenn er nicht mehr berührt wird. Manchmal bleibt jedoch ein Physikalischer Körper zwischen zwei Kollidierungen hängen; in diesem Fall kann es schnell mit dem Jittern beginnen und viele On Collision-Ereignisse in sehr kurzer Folge auslösen. Es wird empfohlen, stattdessen On Trigger-Ereignisse zu verwenden.

Dies ist in bestimmten Situationen in Ordnung:

  • Mit "On Interval " können Sie Skriptflüsse in anpassbaren Intervallen (z. B. einmal pro Sekunde) auslösen, die über die Intervalleinstellung definiert sind. Sie können die Verzögerungseinstellung verwenden, um die Ausführung verschiedener On Interval-Ereignisse mit demselben Intervall zu verstaffnen.

  • Der Timerknoten ist kein Ereignis, löst aber den Tick-Port einmal pro Frame für die Dauer des Timers aus, nachdem er gestartet wurde, indem er seinen Startport eingibt. Wenn der Timer nicht ausgeführt wird, hat er null Laufzeitkosten.

Versuchen Sie nicht, diese Ereignisse zu verwenden, um zu überprüfen, ob bestimmte Variablen, Eigenschaften oder Bedingungen geändert wurden. Stattdessen ist es besser, ein On State Changed-Ereignis zu verwenden, um Änderungen ohne Leerlauf zu überwachen.

Dies ist immer in Ordnung:

  • Bei "Zustand geändert " wird nur ausgelöst, wenn und wenn eines der Eingabeports ihren Wert ändert. Für Skriptvariablen und Komponenteneigenschaften wird dies sehr effizient implementiert, sodass keine Laufzeitkosten anfallen, solange nichts geändert wird.

  • On State Changed can also be used to observ more complex input (for example, the results of a calculation), that require it to re-evaluate the input once per frame to determine if it has changed. Sie müssen die Option "Umfrage zulassen" aktivieren, um dieses Feature zu aktivieren. Die Skriptbearbeitungsbenutzeroberfläche informiert Sie darüber und warnt Sie über die potenziellen Auswirkungen auf die Leistung. Trotzdem ist dies noch ein bisschen effizienter als das Skript Ihrer eigenen Abruflogik mithilfe eines On Update-Ereignisses .

  • Bei "Wörterbuchelement hinzugefügt " und "On Dictionary Item Removed" funktionieren auf ähnliche Weise und haben keine Laufzeitkosten, solange sich nichts ändert.

  • Bei Trigger Enter und On Trigger Exit gibt es keine potenziellen Leistungsgefahr der entsprechenden On Collision-Ereignisse (siehe oben).

Nächste Schritte