Unreal Engine 5.5–5.8Windows 64-Bit

FrameDoctor-Benutzerhandbuch

Zeichne die Abläufe in deiner Szene auf, finde aufwendige CPU-Arbeit und prüfe, ob eine manuelle Änderung hilft. Hier kannst du auch mit deinem allerersten Unreal-Engine-Projekt beginnen.

  1. Szene aufzeichnen
  2. Messdaten lesen
  3. Eine Änderung vornehmen
  4. Aufnahmen vergleichen
  5. Ergebnis speichern

Ein Frame ist ein einzelnes Bild deines Spiels. Die Framezeit gibt an, wie lange das Spiel braucht, um sein nächstes Bild zu erzeugen. Lange Frames fühlen sich wie Pausen oder Ruckler an. FrameDoctor zeichnet eine Trace auf, also eine Datei mit zeitlich erfassten Ereignissen, und stellt diese als Diagramm und Liste von CPU-Scopes dar.

  • Capture: eine laufende Szene aufzeichnen.
  • Findings: Framezeiten lesen und einen Teil der CPU-Arbeit untersuchen.
  • Compare: zwei aufbewahrte Development-Builds vor und nach einer Änderung messen.
  • Runs: Aufnahmen erneut öffnen und Messdaten exportieren.
  • Settings: Aufnahmeprofile speichern und Schwellenwerte festlegen.
Die Änderung nimmst du selbst vor. FrameDoctor hilft dir beim Untersuchen und Messen. Es schreibt deinen Code nicht um und behebt Probleme im Spiel nicht automatisch. Die Analyse läuft lokal.

Dieses Handbuch ist übersetzt; die hier gezeigten Plugin-Bedienelemente behalten ihre englischen Bezeichnungen. Die Sprachauswahl ändert das Handbuch. Ein kurzes Glossar erklärt unbekannte Unreal-Begriffe.

FrameDoctor installieren und öffnen

FrameDoctor unterstützt Unreal Engine 5.5, 5.6, 5.7 und 5.8 unter Windows 64-Bit. Wähle das Plugin-Paket für deine Engine-Version.

Wenn du Unreal noch nie geöffnet hast

Öffne Epic Games Launcher → Unreal Engine → Library und starte deine installierte Engine. Öffne ein bestehendes Projekt oder wähle Games → Blank → Blueprint, gib Projektname und Ordner an und klicke auf Create. Ein Projekt enthält dein Spiel; eine Map, auch Level genannt, enthält darin eine Szene.

Installation über Fab

  1. Schließe Unreal Editor. Suche in der Fab Library des Launchers nach FrameDoctor und klicke auf Install to Engine.
  2. Wähle die Engine-Version deines Projekts und schließe die Installation ab.
  3. Öffne dein Projekt. Gehe zu Edit → Plugins, suche nach FrameDoctor, aktiviere es und starte den Editor auf Aufforderung neu.
  4. Öffne Tools → FrameDoctor im Hauptmenü des Editors.

Installation aus einer bereitgestellten ZIP-Datei

  1. Schließe den Editor und entpacke das Plugin.
  2. Lege den einzelnen Ordner FrameDoctor im Ordner Plugins deines Projekts ab. Erstelle Plugins, falls er noch fehlt.
  3. Prüfe den folgenden Pfad. Vermeide einen zusätzlichen verschachtelten Ordner FrameDoctor/FrameDoctor.
  4. Öffne das Projekt, aktiviere das Plugin unter Edit → Plugins, starte neu und öffne Tools → FrameDoctor.
YourProject/
  YourProject.uproject
  Plugins/
    FrameDoctor/
      FrameDoctor.uplugin
      Content/
      Resources/
      Source/
Was tun, wenn Unreal Module kompilieren möchte?

Ein kompiliertes Paket enthält auch Binaries. Ein Paket nur mit Quellcode benötigt eine passende C++-Compiler-Toolchain, selbst wenn dein Spiel Blueprints verwendet. Installiere Visual Studio 2022 mit Game development with C++ und dem für deine Engine nötigen Windows SDK. Füge in einem reinen Blueprint-Projekt über Tools → New C++ Class eine minimale Klasse hinzu, um das C++-Buildziel des Projekts zu erstellen. Schließe Unreal und baue in Visual Studio das Projektziel Development Editor / Win64. Öffne danach das Projekt wieder. Falls die Kompilierung fehlschlägt, lies den ersten Buildfehler und prüfe, ob Engine- und Paketversion zusammenpassen.

Epics Anleitung: Plugins aktivieren und installieren.

Deine erste Aufnahme

Beginne mit einer Szene. Ein Szenario sagt FrameDoctor, wann die Szene bereit ist und die Messung beginnen kann. Zum Lernen und Untersuchen kannst du das optionale Szenario aus dem separaten Beispielprojekt verwenden.

Vor Schritt 1: Installiere FrameDoctor für deine Engine-Version; die Installation in der Engine wird empfohlen. Lade das optionale Beispielprojekt herunter (UE 5.5–5.8, Win64) und entpacke es. Das Projekt enthält nur Inhalte, benötigt das separat installierte Plugin und ist UE 5.5 zugeordnet. Für UE 5.6–5.8 klicke zuerst mit der rechten Maustaste auf FrameDoctorExample.uproject, wähle Switch Unreal Engine version und deine Engine. Öffne FrameDoctorExample.uproject mit dieser Engine und stelle sicher, dass FrameDoctor aktiviert ist.

  1. Map öffnen und speichern. Öffne im Beispielprojekt eine Map oder wähle File → New Level, speichere sie im Content-Ordner des Projekts und verwende dann File → Save All.
  2. Play starten. Klicke auf die dreieckige Schaltfläche Play in der Editor-Werkzeugleiste. Das heißt Play In Editor, kurz PIE. Mit Shift + F1 gibst du die Maus frei und kannst den Editor bedienen, während das Spiel weiterläuft.
  3. Capture auswählen. Öffne Tools → FrameDoctor → Capture. Lass Use a packaged Development build deaktiviert. PIE zeichnet die bereits in Play laufende Map auf; ein anderer Wert im Feld Map wechselt diese Welt nicht.
  4. Beispiel auswählen. Suche unter Scenario nach BP_ExploratoryScenario. Um das Asset zu finden, öffne den Content Browser oder Content Drawer mit Ctrl + Space und suche unter Content → FrameDoctorExample → Scenarios (/Game/FrameDoctorExample/Scenarios). Du wählst das Szenario in FrameDoctor aus; du ziehst es nicht in das Level.
  5. Aufzeichnen. Behalte 10 Sekunden Aufwärmzeit und 60 Sekunden Messdauer bei. Lies Preflight und klicke auf Capture running PIE. Lass Play laufen und führe die Aktion aus, die du untersuchen möchtest. Die Aufwärmzeit geht nicht in das Messergebnis ein.
  6. Findings lesen. Öffne nach Ende der Aufnahme Findings, falls es noch nicht ausgewählt ist. Lies Capture quality and unavailable reasons und wähle dann einen CPU-Scope, um seine Messdaten zu sehen.
Das erste Beispiel dient der Erkundung. Seine Beschreibung stellt keine wiederholbaren Spielbedingungen sicher. Du kannst die Trace untersuchen; bevor du aber einen A/B-Effekt bestätigst, brauchst du ein vollständig beschriebenes Szenario und zwei Development-Builds.

Lass das Spiel laufen, bis die Aufnahme beendet ist. Esc oder die Stop-Schaltfläche des Editors können PIE beenden und die Aufnahme unterbrechen. Mit Cancel in FrameDoctor brichst du dessen aktuellen Auftrag ab.

Festlegen, was aufgezeichnet wird

Capture hat zwei Ziele. Ist Use a packaged Development build deaktiviert, wird die aktuelle PIE-Welt aufgezeichnet. Ist es aktiviert, startet FrameDoctor ein separates paketiertes Spiel. Verwende diesen Weg für wiederholbare Vorher-Nachher-Messungen.

Bedienelemente für die Aufnahme
BedienelementVerwendung
Baseline Development executableWähle den aufbewahrten Build A mit Browse. Dieser Pfad wird auch in Compare verwendet.
Map und ScenarioWähle deine Szenarioklasse. Gib für Development die aufbereitete Map und den Pfad der Szenarioklasse an.
WarmupZeit zur Stabilisierung der Szene nach ihrer Bereitschaft. Sie zählt nicht zur Messung.
MeasurementZeit, die in das Ergebnis eingeht. Beginne mit 60 Sekunden.
Detailed naming for investigationErfasst mehr benannte Ereignisse. Das verursacht zusätzlichen Aufwand; verwende auf beiden A/B-Seiten dieselbe Einstellung.
PreflightPrüfe vor dem Start den ausgewählten Modus, die Trace-Kanäle und den verfügbaren Speicherplatz.

Das normale CPU-Profil verwendet cpu,frame,bookmark. CPU-Ereignisse beschreiben Arbeit; Frame-Ereignisse liefern Framegrenzen; Bookmarks markieren das Messintervall. Eine bereits laufende externe Aufzeichnung muss enden, bevor FrameDoctor seine eigene Trace startet.

Zuerst kommt die Bereitschaft, dann die Aufwärmzeit und schließlich die Messung. Ready timeout und Maximum trace size werden unter Settings festgelegt. Abgebrochene oder unterbrochene Aufnahmen bleiben mit ihrem Status erhalten; sie sind keine abgeschlossenen Vergleichsbaselines.

Capture-Seite mit Development-Ziel, Map, Szenario, Aufwärmzeit, Messdauer und Preflight.
Eine beispielhafte Konfiguration für ein paketiertes Development-Build. Verwende im separaten Beispielprojekt PIE und lasse das Kontrollkästchen für das paketierte Build deaktiviert.

Die CPU-Messdaten lesen

Eine vorhandene Trace öffnen

Klicke auf Import trace, wähle eine fertig aufgezeichnete .utrace-Datei und warte auf Findings. Beende die Aufzeichnung, bevor du sie importierst. Bewahre die danebenliegende manifest.json und die ursprünglichen Aufnahmedateien zusammen mit der Trace auf, wenn du ihren Ursprung für Vergleiche belegen musst. Lies Capture quality and unavailable reasons, um die verfügbaren CPU-, Frame- und Messdaten zu prüfen.

Ohne genau ein eindeutiges, vollständiges Paar von FrameDoctor-Bookmarks für Messbeginn und Messende wird die gesamte Trace als explorative Aufnahme analysiert. Fehlt das Aufnahmemanifest oder wird es nicht unterstützt, bleibt die Vollständigkeit der Aufnahme ungeprüft. Du kannst die verfügbaren Ereignisse untersuchen, aber ungeprüfte oder explorative Daten nicht als bestätigte A/B-Baseline verwenden.

Beginne mit Status und Qualität der Aufnahme. Öffne Capture quality and unavailable reasons, wenn Daten fehlen oder ein Wert als Unavailable erscheint. Das heißt, dass der Wert nicht ermittelt werden konnte; es bedeutet nicht null.

  1. Lies Game frame p95 und die Messdauer. Vergleiche die Kurve mit dem Framebudget.
  2. Suche mit Search scopes… nach einem Timer-Namen oder wähle mit All threads einen Thread aus. Ein Thread ist ein Arbeitsablauf auf der CPU; GameThread führt normalerweise die Spiellogik aus.
  3. Klicke auf eine Scope-Zeile. Ihr Bereich erläutert Measured (Messwerte), Interpretation (Deutung), Next experiment (nächster Versuch) und Behavior risk (Risiko für das Spielverhalten).
  4. Mit Copy evidence kopierst du die Kennung von ausgewähltem Timer, Thread und Intervall. Mit Open in Insights öffnest du dieselbe Trace in Unreal Insights und navigierst manuell zu diesem Intervall.

Exclusive / frame ist die Dauer des Scopes nach Abzug seiner untergeordneten Scopes auf demselben Thread, gemittelt über gültige Frames. Calls zählt die im Messintervall gestarteten Aufrufe. Ein Scope kann Wartezeit enthalten. Sein Name allein identifiziert kein bestimmtes Asset und belegt nicht den Aufwand eines einzelnen Blueprint-Knotens.

Die Suche hat eine sichtbare Grenze. Die Tabelle lädt die ersten 250 nach Rang geordneten Zeilen. Suche und Threadfilter gelten für diese geladenen Zeilen. Die vollständige Analyse-JSON enthält die übrigen Scope-Aggregate. Mit Clear filters stellst du die Tabelle wieder her.

Addiere keine verschachtelten inklusiven Zeiten oder Zeiten paralleler Threads, um den Frameaufwand abzuschätzen. Game-Frames, Render-Frames und der Kontext der GPU-Warteschlange bedeuten unterschiedliche Dinge. Fehlt ein maßgeblicher GPU-Framewert, bleibt er nicht verfügbar.

Findings mit echtem Framediagramm, ausgewähltem Scope EnemyAwareness::Update und zugehörigem Messdatenbereich.
Ein ausgewählter Scope verbindet gemessenen Aufwand mit einem Untersuchungsschritt. Die gezeigten Werte stammen aus einer Beispielaufnahme.

Das Framezeitdiagramm erkunden

Die waagerechte Achse zeigt den Verlauf der Messzeit; die senkrechte Achse zeigt die Framedauer in Millisekunden. Höhere Spitzen bedeuten langsamere Frames. Die gestrichelte Budgetlinie entspricht deinem gewählten Ziel: 16.67 ms entsprechen ungefähr 60 Bildern pro Sekunde.

  • Zoomen: Nutze das Mausrad über dem Diagramm oder ziehe die bernsteinfarbenen Griffe in der kleinen Übersicht darunter.
  • Verschieben: Ziehe innerhalb des ausgewählten Übersichtsbereichs. Hat das Diagramm den Tastaturfokus, verschieben Pfeil links und rechts den sichtbaren Bereich.
  • Untersuchen: Bewege den Zeiger über das Diagramm. Die Anzeige zeigt den Zeitpunkt oder zusammengefassten Darstellungsbereich, die Anzahl der Stichproben und die verfügbare minimale/maximale Dauer.
  • Zurücksetzen: Klicke auf Reset view. Auch Home oder Esc setzt das fokussierte Diagramm zurück.
Zoomen ändert die Ansicht. Der p95-Hauptwert, die CPU-Scope-Liste und die Messdaten beziehen sich weiterhin auf die gesamte Messung. Eine engere Ansicht berechnet diese Werte nicht für diesen Bereich neu.

Bei weit herausgezoomter Ansicht können mehrere Frames in einen Darstellungsbereich fallen. Beachte dessen Stichprobenanzahl und Wertebereich, statt ihn als einzelnen Frame zu betrachten. Fehlende Framedaten bleiben als Lücken sichtbar.

Vergrößertes Framezeitdiagramm mit Übersichtsgriffen, Anzeige eines zusammengefassten Bereichs unter dem Mauszeiger und unveränderten Werten der Gesamtmessung.
Die Übersicht markiert den sichtbaren Ausschnitt; der Text nennt die Werte, die weiterhin die gesamte Aufnahme beschreiben.

Zwei Development-Builds vorbereiten

Ein Development-Build ist ein paketiertes Spiel, das außerhalb des Editors mit aktivierten Entwicklungsfunktionen läuft. Baseline A ist dein ursprünglicher Build. Candidate B enthält eine beabsichtigte Änderung. Bewahre jeden vollständigen Build in einem eigenen Ordner auf.

  1. Speichere deine Map und dein vergleichstaugliches Szenario. Aktiviere FrameDoctor im Projekt.
  2. Öffne Edit → Project Settings → Packaging. Trage deine Map unter List of maps to include in a packaged build ein. Stelle sicher, dass auch der Szenario-Blueprint aufbereitet wird: Behalte eine feste Referenz aus eingebundenen Inhalten bei oder füge seinen Ordner unter Additional Asset Directories to Cook hinzu.
  3. Wähle in den Paketierungsoptionen des Editors unter Platforms → Windows die Buildkonfiguration Development und paketiere das Projekt. Je nach Engine-Version können die Menüs anders angeordnet sein. Bewahre die vollständige Ausgabe als Build A auf.
  4. Nimm eine manuelle Änderung vor, die du testen möchtest. Speichere und paketiere Build B in einem anderen Verzeichnis. Halte Szene, Eingabe, Kamera, NPCs und Aufnahmeeinstellungen gleich.
  5. Aktiviere in Capture die Option Use a packaged Development build. Wähle die ausführbare Datei von A, dann die Map, und gib den Pfad zur generierten Szenarioklasse ein.
Map: /Game/Maps/TestMap
Scenario: /Game/Scenarios/BP_TestScenario.BP_TestScenario_C
Executable: BuildA/Windows/YourProject/Binaries/Win64/YourProject.exe

Verwende deine eigenen Assetnamen. /Game bezeichnet den Content-Ordner des Projekts aus Sicht von Unreal, kein Windows-Laufwerk. Die generierte Blueprint-Klasse endet auf _C. Behalte den gesamten paketierten Ordner samt Inhalten; nur die ausführbare Datei zu kopieren reicht nicht.

Preflight prüft die angeforderte Konfiguration. Erst das tatsächliche Laden zeigt, ob der externe Build diese Map und dieses Szenario enthält. Capture ist für Entwicklungskonfigurationen bestimmt; Shipping- und Test-Builds können keine FrameDoctor-Aufnahmen erstellen.

Epics Anleitung: ein Unreal-Projekt paketieren.

Prüfen, ob deine Änderung geholfen hat

  1. Bereite A und B wie oben vor. Klappe unter Compare den Bereich New Development comparison auf.
  2. Wähle Baseline Development executable und Candidate Development executable. Beschreibe unter Intended change genau, was du geändert hast.
  3. Wähle vor dem Start die Primary metric: p95GameFrame für langsamere Frames, meanGameFrame für die durchschnittliche Framedauer oder p99GameFrame für die besonders langsamen Frames am Verteilungsende.
  4. Beginne mit 5 Paaren, 10 Sekunden Aufwärmzeit und 60 Sekunden Messdauer. Behalte nur gameBuildId als normalerweise erlaubten Unterschied für deine beabsichtigte Buildänderung bei. Gleiche Auflösung, Grafikeinstellungen, VSync, Framebegrenzung, Szenario und Instrumentierung ab.
  5. Klicke auf Launch paired Development series. FrameDoctor führt die aufbewahrten Builds abwechselnd in der Reihenfolge AB/BA aus. Lass beide Buildordner unverändert, bis die Serie beendet ist.
  6. Lies das Urteil mit Begründungen, die gepaarte Differenz, das Rauschen, den Schwellenwert und jedes einzelne Rohdatenpaar. Über Open HTML report oder Open report folder öffnest du das gespeicherte Ergebnis.
Bedeutung des Vergleichsurteils
UrteilNächster Schritt
ImprovedDie gewählte Framezeitmetrik ist beständig über den Bestätigungsschwellenwert hinaus gesunken. Prüfe die korrekte Spielfunktion separat.
RegressedDie gewählte Metrik ist beständig über den Schwellenwert hinaus gestiegen. Untersuche die Änderung oder mache sie rückgängig.
InconclusiveDer Effekt ist zu klein, uneinheitlich oder hat zu wenig gültige Daten. Daraus folgt weder Gleichheit noch Wirkungslosigkeit.
InvalidComparisonDie Aufnahmen tragen keinen gültigen Vergleich. Lies die Gründe zu Abweichungen oder fehlenden Daten und behebe sie zuerst.

Eine Bestätigung erfordert mindestens 5 vollständige Paare, 30 gemessene Sekunden und 300 vollständige gültige Frames in jeder Aufnahme sowie vergleichbare Bedingungen. Kürzere Aufnahmen können der Erkundung dienen. Das explorative Beispielszenario kann keinen Effekt bestätigen.

Weniger Millisekunden sind besser. Die gepaarte Differenz ist der Median der Differenzen B − A aller Paare. Sie kann vom Ergebnis abweichen, das du durch Subtraktion der beiden angezeigten Mediane erhältst. Der Effekt muss den größten Wert aus absolutem Schwellenwert, relativem Schwellenwert und geschätztem Rauschen überschreiten; mindestens 80% der Paare müssen dieselbe Richtung zeigen. Die Standardwerte sind 0.5 ms und 5%. Diese Prüfungen helfen, die Stabilität einzuschätzen; allein belegen sie keine Ursache.

Um eine abgeschlossene Serie erneut zu öffnen, verwende Import series and export report und wähle ihre series.json. Erlaubte Unterschiede können abweichende Instrumentierung oder Berechnungsmethoden nicht außer Kraft setzen.

Echter Vergleich mit fünf Paaren, Urteil, einzelnen Aufnahmen, gepaarter Differenz, Rauschen und Schwellenwert.
Prüfe neben dem Gesamturteil auch alle Paare und ihre Bedingungen.

Messdaten erneut öffnen und teilen

Öffne Runs und klicke auf Refresh saved runs. Wähle eine Zeile, um die Quelldetails zu lesen. Öffne eine Aufnahme per Doppelklick oder mit Open selected evidence erneut in Findings. Bei einer Serie öffnet sich der Paarvergleichsbericht.

Die Standardausgabe liegt unter <YourProject>/Saved/FrameDoctor; in Settings kannst du einen anderen Ausgabeordner wählen. Eine Einzelaufnahme bewahrt ihre Quell-.utrace, ihr Manifest und ihre Analyse auf. Eine Serie bewahrt series.json, comparison.json, einen HTML-Bericht und Verweise auf die ursprünglichen Aufnahmen auf.

  1. Lade die Serie, die du teilen möchtest.
  2. Wähle, ob du mit Include source traces in the export die Quell-Traces einbeziehen möchtest. Lass Remove absolute paths and username from exported JSON aktiviert, wenn das sinnvoll ist.
  3. Klicke auf Export paired series bundle, wähle einen Exportort und warte auf den Abschluss.
  4. Prüfe die exportierten Dateien und sende dann das vollständige Paket an die Person, die das Ergebnis beurteilt.
Rohe Traces behalten ihren ursprünglichen Inhalt. Das Bereinigen der JSON entfernt keine Pfade oder Nachrichten innerhalb einer Trace. Beide Exportkontrollkästchen sind standardmäßig aktiviert. Du kannst Traces für ein kleineres Prüfpaket weglassen; um das Ergebnis nach dem Verschieben erneut zu bestätigen, benötigt der Empfänger aber die ursprünglichen gültigen Aufnahmen und rohen Traces.

Promote current run to baseline speichert eine geeignete vollständige und vergleichbare Aufnahme unter <YourProject>/FrameDoctor/Baselines. Eine kurze oder explorative Aufnahme ist dafür nicht geeignet. Behalte die Originaldaten, bis du sie nicht mehr untersuchen oder erneut bestätigen musst.

Gespeicherte abgeschlossene Aufnahmen, Verfügbarkeit der Quell-Traces, Exportoptionen und ausgewählte Quellaufnahme.
Verfügbare Quell-Traces erhalten die Verbindung eines Berichts zur tatsächlichen Aufnahme.

Wiederverwendbare Einstellungen speichern

Ein Profil ist ein gespeicherter Satz von Aufnahme- und Analyseeinstellungen. Wähle unter Settings eine Profile ID und einen Namen, fülle die Felder aus und verwende Save profile. Mit Load profile öffnest du eine Profil-JSON-Datei erneut. Bewahre Profile im Projektordner FrameDoctor/Profiles auf, wenn du sie mit der Projekthistorie verfolgen möchtest.

Wichtige Einstellungen für den Einstieg
EinstellungBedeutung
Trace channelsVerwende cpu,frame,bookmark für normale CPU-/Frameaufnahmen.
Ready timeoutWartezeit, bis das Szenario bereit ist, bevor die Aufwärmzeit beginnt.
Maximum trace sizeSpeicherbudget für eine Trace. Überschreitet eine Aufnahme es, schlägt sie fehl und behält Teildaten.
Frame budgetDeine gewünschte Framedauer; standardmäßig 16.67 ms.
Hitch thresholdSchwelle zum Zählen langer Frames; standardmäßig 50 ms.
Absolute / relative effect thresholdMinimaler Vergleichseffekt vor Berücksichtigung der Rauschprüfung; standardmäßig 0.5 ms und 5%.
Output folderSpeicherort neuer Aufnahmen und Berichte. Leer verwendet den Standardpfad Saved/FrameDoctor.

Verwende auf beiden A/B-Seiten dasselbe Profil. Passe Schwellenwerte vor Versuchsbeginn an dein Ziel an. Änderungen am Formular während eines laufenden Auftrags überschreiben dessen erfasste Einstellungen nicht. Ein Profil mit neuerem, nicht unterstütztem Schema öffnet sich schreibgeschützt; verwende ein kompatibles Plugin, statt die Schemanummer manuell zu ändern.

Settings-Seite mit Profilfeldern, Aufnahmegrenzen, Analyseschwellen und Ausgabeort.
Speichere ein Profil, damit spätere Aufnahmen dieselben bewusst gewählten Bedingungen verwenden.

Ein wiederholbares Szenario erstellen

Verwende dies, wenn du eine Vorher-Nachher-Änderung bestätigen möchtest. Ein Szenario muss die tatsächlichen Kamera-, Eingabe-, NPC- und Zufallsbedingungen herstellen und beschreiben. Die Hooks lassen sich mit Blueprints implementieren; C++ ist zum Erstellen von Szenarien optional.

Um das separate Beispiel in einem bestehenden Projekt zu verwenden, öffne das Beispielprojekt, klicke im Content Browser mit der rechten Maustaste auf BP_ExploratoryScenario und wähle Asset Actions → Migrate. Wähle den Content-Ordner deines eigenen Projekts als Ziel und aktiviere dort FrameDoctor. Alternativ erstellst du mit den folgenden Schritten ein eigenes Szenario.

  1. Wähle im Content Browser Add → Blueprint Class → All Classes. Suche nach FrameDoctorScenario und erstelle BP_TestScenario im Content deines Projekts.
  2. Öffne diesen Blueprint. Implementiere in seinem Menü Overrides die folgenden Hooks. Es handelt sich um ein für die Aufnahme ausgewähltes Objekt, nicht um einen im Level zu platzierenden Actor.
  3. Kompiliere und speichere Blueprint und Map. Wähle die Klasse in FrameDoctor. Schließe für paketierte Aufnahmen Map und Szenario in den Cook ein, wie unter A und B vorbereiten beschrieben.
  4. Erstelle eine kurze explorative Aufnahme, um Bereitschaft und Aufräumen vor einem langen Vergleich zu prüfen.
Szenario-Hooks
HookAufgabe deines Blueprints
Prepare(World)Die tatsächlichen Szenen-Actors finden, zu ändernde Einstellungen sichern, Kamera-/Eingabe-/NPC-Zustand setzen und verwendete Zufallsströme initialisieren.
IsReadyErst true zurückgeben, wenn nötige Actors, Assets und der Anfangszustand bereit sind. Standardmäßig wird false zurückgegeben. Eine feste Verzögerung allein stellt keine Bereitschaft sicher.
BeginMeasurementDie kontrollierte Aktion nach der Aufwärmzeit starten.
EndMeasurementDie Aktion am Messende stoppen, auch bei einem Abbruch nach ihrem Beginn.
CleanupNur die Änderungen deines Szenarios zurücksetzen. Teilweise Vorbereitung und Abbruch berücksichtigen.
DescribeScenarioEinen Frame Doctor Scenario Snapshot mit den folgenden Bedingungen zurückgeben.
Den Szenario-Snapshot ausfüllen

Verbinde in DescribeScenario den Knoten Make Frame Doctor Scenario Snapshot mit dem Rückgabewert. Fülle diese Felder wahrheitsgemäß aus:

  • ScenarioId / Revision: eine stabile, nicht leere Kennung und Revision.
  • CameraRoute: der tatsächliche feste Blickpunkt oder reproduzierbare Pfad.
  • InputConditions: die verwendete Eingabe oder wie Spielereingaben ausgeschlossen werden.
  • NpcConditions: Anzahl und Verhalten der NPCs, einschließlich der ausdrücklichen Angabe, dass es keine NPCs gibt.
  • ParametersJson: optionales gültiges JSON-Objekt, etwa {"route":"fixed","npcCount":0}, aber nur, wenn das die Szene beschreibt.
  • SeedPolicy / RandomSeed: Known nur, wenn du den Zufall des Spiels tatsächlich mit diesem Seed initialisierst; NotUsed, wenn kein Zufall verwendet wird; Unknown, wenn dies nicht feststeht.
  • DeclaredNondeterminism: verbleibende Schwankungen, etwa Physik, Streaming oder die Ablaufplanung des Betriebssystems.

Eine Seed-Zahl einzutragen initialisiert das Spiel nicht für dich. Bei unbekannten Bedingungen bleibt die Aufnahme explorativ. Das im separaten Beispielprojekt verfügbare BP_ExploratoryScenario gibt absichtlich eine leere Beschreibung zurück.

Entferne während Cleanup keine Actors oder Aufzeichnungen anderer Systeme. Prüfe nach einer Leistungsänderung das Spielverhalten separat; gleiche Zeitmessbedingungen belegen nicht, dass deine neue Logik korrekt ist.

Wenn etwas nicht funktioniert

FrameDoctor fehlt unter Tools

Prüfe Edit → Plugins, aktiviere FrameDoctor und starte neu. Prüfe, ob das Paket zur Engine passt und FrameDoctor.uplugin direkt im Plugin-Ordner liegt. Wenn du Quellcode verwendest, schließe zuerst den Development-Editor-Build ab.

Capture running PIE ist nicht verfügbar

Starte die Szene mit Play. Lass das Kontrollkästchen für paketierte Builds deaktiviert, wähle eine konkrete Szenarioklasse und warte, bis ein anderer Auftrag beendet ist. Gib die PIE-Maus mit Shift+F1 frei, um den Tab zu bedienen.

Das Beispielszenario ist nicht sichtbar

Das optionale Beispiel wird separat heruntergeladen; das Plugin-Paket enthält keine Blueprint-Beispiele. Öffne das Beispielprojekt mit installiertem und aktiviertem FrameDoctor, suche BP_ExploratoryScenario unter Content → FrameDoctorExample → Scenarios und wähle seine Klasse in Capture. Für dein eigenes Projekt musst du zuerst das Asset mit Migrate übertragen. Es ist kein Level-Actor.

Zeitüberschreitung bei Ready timeout

Das Szenario wurde nicht rechtzeitig bereit. Prüfe deinen IsReady-Override, die tatsächlichen Actors/Assets, die Map und den aufbereiteten Klassenpfad. Die Basisklasse gibt false zurück. Erhöhe Ready timeout für berechtigte Ladezeiten; behalte eine aussagekräftige Bereitschaftsprüfung bei.

Framezeit oder exklusiver Aufwand zeigt Unavailable

Framezeiten benötigen Frame-Ereignisse und vollständige Frames im Messintervall. Exklusiver CPU-Aufwand benötigt zusätzlich eine vollständige, konsistente Scope-Hierarchie. Zeichne cpu,frame,bookmark auf, lass die Aufnahme laufen und lies die gespeicherte Begründung. Betrachte einen nicht verfügbaren Wert niemals als null.

Der Vergleich zeigt Inconclusive oder InvalidComparison

Lies die Begründungen. Prüfe den Status jeder Aufnahme, fünf vollständige Paare, 30 gemessene Sekunden und 300 vollständige Frames je Aufnahme, ein vollständig beschriebenes Szenario, stabile Bedingungen und übereinstimmende Instrumentierung. Inconclusive belegt keine Wirkungslosigkeit; behebe Gültigkeitsprobleme, bevor du eine Differenz deutest.

Ein paketierter Build findet Map oder Szenario nicht

Paketiere einen Development-Build mit aktiviertem FrameDoctor. Schließe Map und Szenario in den Cook ein. Verwende Assetpfade wie /Game/... und das Blueprint-Klassensuffix _C. Wähle die ausführbare Datei aus dem aufbewahrten vollständigen Buildordner.

Die Aufnahme schlägt fehl, stoppt oder überschreitet ihre Speichergrenze

Lies Status und Begründung der gespeicherten Aufnahme. Prüfe Speicherplatz, Schreibrechte, Trace-Größenlimit und ob ein anderer Recorder aktiv ist. Verringere Ereignisdetail oder Dauer für eine neue Aufnahme. Lass Play laufen und ändere während der Messung weder Maps noch Grafikeinstellungen.

Open in Insights kann die Trace nicht öffnen

Installiere Unreal Insights für deine Engine. Halte die Quell-Trace verfügbar. FrameDoctor öffnet dieselbe Quelle; die genaue Navigation zu Timer, Thread und Intervall erfolgt manuell. Kann eine Engine einen Pfad mit Nicht-ASCII-Zeichen nicht öffnen, verwende einen einfachen ASCII-Arbeitsort und bewahre die ursprüngliche Aufnahme auf.

Ein Bericht öffnet sich, aber seine Quell-Trace fehlt

Ein exportierter Bericht kann ohne Traces lesbar sein, doch eine erneute Bestätigung braucht die ursprünglichen gültigen Rohdaten. Exportiere ein neues Paket mit Quell-Traces oder stelle die vollständigen ursprünglichen Aufnahmeordner wieder her. Das Bereinigen der JSON erstellt keine fehlenden Traces.

Ein kurzes Glossar

Projekt / Map
Der Arbeitsbereich deines Spiels / ein darin gespeichertes Level oder eine Szene.
Blueprint
Ein Unreal-Asset für visuelle Programmierung. Du verbindest Knoten, statt C++ zu schreiben.
PIE
Play In Editor: das Spiel läuft innerhalb von Unreal Editor.
Development / Shipping
Ein Entwicklungsbuild / eine Konfiguration für die endgültige Auslieferung. Verwende Development für paketierte Aufnahmen.
Trace / .utrace
Die Originaldatei der aufgezeichneten Zeitereignisse.
Scope / Timer / Thread
Ein gemessener Arbeitsabschnitt / sein Name / der CPU-Arbeitsablauf, auf dem er lief.
ms / FPS
Millisekunden pro Frame / Bilder pro Sekunde. Bei 16.67 ms pro Frame entstehen etwa 60 Bilder pro Sekunde.
Mittelwert / p95 / p99
Durchschnittliche Framedauer / eine Dauer, die 95% / 99% der vollständigen Frames nicht überschreiten. Ein höheres Perzentil betont langsamere Frames.
Aufwärmzeit / Messung
Vom Ergebnis ausgeschlossene Stabilisierungszeit / das für die Berechnung verwendete Intervall.
Baseline / Kandidat / Paar
Der ursprüngliche Build / ein Build mit deiner Änderung / je eine gemeinsam ausgewertete Aufnahme beider Builds.
Rauschen / Schwellenwert
Schwankung zwischen Wiederholungen / der minimale stabile Effekt für eine Bestätigung.
Cook
Unreals Aufbereitung von Assets, damit sie in einem paketierten Spiel laufen können.
Manifest / Profil
Gespeicherte Bedingungen und Status einer Aufnahme / die gewählten Aufnahmeeinstellungen.

Version und Support

FrameDoctor 1.0.0 · Unreal Engine 5.5, 5.6, 5.7 und 5.8 · Windows 64-Bit.

Gib bei einer Supportanfrage Engine- und Plugin-Version an, ob du PIE oder Development verwendet hast, die angeklickte Aktion, den gespeicherten Status samt Begründung und das erwartete Verhalten. Füge bei Bedarf einen Screenshot oder ein geprüftes Messdatenpaket bei. Teile keine persönlichen Pfade oder ungeprüften Rohprotokolle.

Bei einem Fehler oder einer unklaren Anweisung in diesem Handbuch erstelle ein Dokumentationsticket. Nutze für Plugin-Support den Supportkontakt auf der FrameDoctor-Produktseite oder deinen Kaufkanal.