Der Profile Analyzer ist eine der vielen Funktionen, die in dem E-Book Ultimative Anleitung zur Profilierung von Unity-Spielen. Dieser mehr als 70-seitige Leitfaden vereint fortgeschrittenes Wissen und Ratschläge von externen und internen Unity-Experten, wie man eine Anwendung in Unity profiliert, ihren Speicher verwaltet und ihren Energieverbrauch von Anfang bis Ende optimiert.
Profil Analyzer Komplettlösung
Möchten Sie wissen, wo Sie Ihre Leistung verbessern können? Möchten Sie Leistungswerte vor und nach einer Änderung vergleichen? Sind Sie sich der Auswirkungen bewusst, die eine Aktualisierung der Unity-Version auf Ihr Spiel hat? Der Profile Analyzer hilft Ihnen bei der Beantwortung dieser Art von Fragen.
Während der standardmäßige Unity Profiler die Analyse von Einzelbildern ermöglicht, kann der Profile Analyzer Profilierungsmarkerdaten, die aus einer Reihe von Unity Profiler-Frames erfasst wurden, zusammenfassen und visualisieren.
Der Profile Analyzer hilft Ihnen, herauszufinden, worauf Sie Ihre Bemühungen konzentrieren sollten. Es bietet Ihnen die Möglichkeit, zwei Unity-Leistungsprofilerfassungen nebeneinander zu vergleichen und die Auswirkungen Ihrer Änderungen zu untersuchen.
Der Profile Analyzer ergänzt die bereits im Unity Profiler vorhandene Einzelbildanalyse. Es aggregiert und visualisiert Frame- und Marker-Daten aus einer Reihe von Unity Profiler-Frames, um Ihnen zu helfen, High-Level-Performance-über-Zeit-Muster über viele Frames zu erkennen.
Profile Analyzer führt eine CPU-Leistungsanalyse für mehrere Frames aus der aktuellen Profiler-Sitzung oder aus zuvor gespeicherten Aufzeichnungen durch. Das Tool verfügt über Statistiken und Visualisierungen, die Ihnen helfen, die in den Erfassungen gespeicherten Informationen schnell zu analysieren. Mit der Funktion " Umfassende Filterung" können Sie außerdem die für Sie interessanten Bereiche aufschlüsseln. Sie können damit zwei Datensätze vergleichen oder Rohdaten zur Analyse mit anderen Tools exportieren.
Sie können den Profile Analyzer über Fenster > Paketmanager installieren.
Diese Tipps zur Profilerstellung können Ihnen den Einstieg in die Arbeit mit dem Profile Analyzer erleichtern:
Erhalten Sie eine repräsentative und wiederholbare Erfassung.
Schließen Sie alle anderen Anwendungen. Sie können Profiler.logFile in Ihren C#-Skripten verwenden, um Profildaten direkt aus dem laufenden Spiel herauszuschreiben, was bedeutet, dass Sie den Editor nicht geöffnet haben müssen. Es wird eine .raw-Datei erstellt, die Sie anschließend in den Unity Profiler laden können.
Deaktivieren Sie alle CPU-Hardware-Leistungsskalierungs- oder Boost-Funktionen, damit sich Ihre Taktfrequenz nicht ändert, z. B. Intel SpeedStep oder AMD Precision Boost.
Der Profile Analyzer hilft Ihnen bei der Beantwortung von Optimierungs- und Leistungsfragen, die sich im Laufe des Entwicklungszyklus Ihres Projekts ergeben können. Zum Beispiel in einer 300-Frames-Gameplay-Aufnahme oder einer 20-sekündigen Ladesequenz:
Was sind die größten CPU-Kosten bei den Haupt- und Render-Threads?
Wie hoch sind die durchschnittlichen/mittleren/gesamten Kosten für jeden dieser Marker?
Verwenden Sie den Profile Analyzer, um die Leistungsmerkmale Ihres Codes über mehrere Frames oder sogar verschiedene Session-Captures für eine Vorher-Nachher-Analyse genauer zu untersuchen.
Weitere Tipps für den Datenvergleich mit Profile Analyzer:
Drill in Benutzerskripte (ohne Berücksichtigung der Unity Engine API-Ebenen) durch Auswahl einer Tiefenebene von 4 (Tiefenebenen zeigen Informationen darüber an, wo sich die Markierungen in der Hierarchie befinden). Nachdem Sie auf diese Ebene gefiltert und den Profiler im Timeline-Modus betrachtet haben, können Sie die Tiefe des Aufrufstapels korrelieren, um hier eine Auswahl zu treffen - Monobehaviour-Skripte erscheinen in Blau und befinden sich auf der vierten Ebene darunter. Auf diese Weise können Sie schnell feststellen, ob Ihre spezifischen Logik- und Gameplay-Skripte für sich genommen und ohne andere "Störungen" anstrengend sind.
Filtern Sie Daten für andere Bereiche der Unity-Engine, z. B. für Animatoren oder die Physik der Engine, auf dieselbe Weise, indem Sie eine Tiefenstapelstufe von 3 verwenden.
Auf der rechten Seite im Abschnitt Frame-Zusammenfassung finden Sie das Histogramm des Leistungsbereichs der markierten Methode. Bewegen Sie den Mauszeiger über die Max-Frame-Nummer (den genauen Frame, in dem das maximale Timing gefunden wurde), um einen klickbaren Link zu erhalten, mit dem Sie die Frame-Auswahl im Unity Profiler anzeigen können. Verwenden Sie diese Ansicht, um andere Faktoren zu analysieren, die möglicherweise zu der hohen maximalen Rahmenzeit beitragen.
Wenn Sie sehen möchten, wie sich der Aufruf einer Funktion auf die Leistung auswirkt, verwenden Sie die Methode Unity Profiler oder Profiler.logFile, um Ihre Daten zu erfassen. Wenn Sie den Unity Profiler verwenden, können Sie auf die Schaltfläche Daten ziehen klicken, um sie in den Profile Analyzer zu laden. Andernfalls können Sie eine zuvor gespeicherte Datenerfassung aus einer Datei laden.
Sobald Sie dies getan haben, beginnt die Analyse sofort, und die Daten werden in das Zeitdiagramm eingefügt. Beachten Sie die weißen und cyanfarbenen Balken im Diagramm. Die weißen Balken stellen die Bilddauer dar, und die cyanfarbenen Balken zeigen die aktuell ausgewählte Markierung an. Auf diese Weise können Sie den Beitrag des ausgewählten Markers zur Gesamtzeit des Bildes vergleichen.
Sie können mit Hilfe von Filtern nach Markern suchen. Die Marker-Details werden automatisch aktualisiert, um die von Ihnen ausgewählte Teilmenge widerzuspiegeln, und in der Spalte mit der Anzahl können Sie sehen, wie oft sie auftreten. Das Rahmenzeitdiagramm hebt die Marker hervor. Wenn Sie eine Markierung auswählen, wird auch das Detailfenster "Markierungszusammenfassung" aktualisiert, um die Analysestatistiken für diese bestimmte Markierung anzuzeigen.
Bei der Leistungsanalyse sollten Sie darauf achten, dass die Daten, die Sie betrachten, repräsentativ sind. Wenn Ihre Daten verzerrt sind, können Sie leicht sicherstellen, dass Sie einen durchschnittlichen Frame auswählen, indem Sie die Frame-Zusammenfassung oben rechts verwenden – klicken Sie einfach auf den Frame, der als Median angezeigt wird, und der Profiler zeigt die entsprechende Analyse an. Alternativ können Sie auch mit der rechten Maustaste auf das Zeitdiagramm klicken und Medianrahmen wählen.
Sie können Ihre Analyse auch auf eine Auswahl von Bildern beschränken. Alle Statistiken, die Sie sehen, werden aktualisiert, um die spezifische Auswahl widerzuspiegeln.
Anstatt sich auf einen einzelnen Datenpunkt aus einem einzigen Bild zu verlassen, können Sie mehrere Datenpunkte analysieren, indem Sie eine Gruppe repräsentativer Bilder auswählen. Wenn Sie mit der rechten Maustaste auf das Zeitdiagramm klicken und nach Rahmendauer ordnen, können Sie eine Reihe von Rahmen um den mittleren Rahmen herum auswählen, um eine repräsentative Stichprobe zu erhalten, die einen Teil des Rauschens in Ihren Daten ausgleicht.
Der Profile Analyzer kann helfen, den Leistungsunterschied bei der Anwendung einer projektweiten Einstellung, wie z. B. der Aktivierung von Grafikaufträgen, zu ermitteln. Um diese Funktion zu verwenden, nehmen Sie eine Basislinienaufnahme und dann eine weitere Aufnahme, nachdem Sie Änderungen vorgenommen haben. Führen Sie Ihr Spiel aus, nehmen Sie es mit dem Unity Profiler auf, bringen Sie diese Aufnahme in den Profile Analyzer und bringen Sie dann die zweite Aufnahme hinein.
Sie können die Ergebnisse der beiden Erfassungen nebeneinander im Abschnitt "Frame Summary" sehen.
Um sicherzugehen, dass Ihre Leistung keine Engpässe aufweist, überprüfen Sie die Markierung Gfx.WaitForPresentOnGfxThread auf dem Hauptthread. Geben Sie dazu Gfx.WaitForPresentOnGfxThread in den Filterbereich ein. Wenn der Medianwert dieser Markierung ungleich Null ist, wartet die CPU darauf, dass die GPU ihre Tätigkeit beendet, bevor sie fortfahren kann.
Sie können diesen Marker im Bildzeitdiagramm betrachten, um zu sehen, wie viel er zur Bildzeit beiträgt. Wenn die CPU auf die GPU wartet, dann sind Sie höchstwahrscheinlich GPU-gebunden. Bestätigen Sie dieses Szenario, indem Sie in Ihrem Rendering-Thread-Profil nach dem Vorhandensein von Gfx.PresentFrame oder <GraphicsAPIName>.WaitForLastPresent-Markierungen suchen. Sehen Sie sich unseren Ultimative Anleitung zum Profiling von Unity-Spielen E-Book für weitere Hilfe, oder werfen Sie einen Blick auf die GPU-Profiling-Tools, um zu sehen, wo Sie einige Optimierungen vornehmen können.
Sie können Ihre Daten im oberen Bereich des Profilanalysator-Fensters verwalten. Von hier aus können Sie den Unity Profiler öffnen und "Daten aus dem Unity Profiler ziehen" oder eine zuvor gespeicherte Datei laden (jede Unity-Version).
Sobald Sie Ihre Daten geladen haben, sehen Sie sie im Diagramm der Rahmenzeit. Dies ist ein interaktiver Bereich, in dem Sie eine Reihe von Proben auswählen können. Alle zusammenfassenden Informationen in der Tabelle "Markerdetails" werden automatisch aktualisiert, um Ihre Auswahl zu berücksichtigen. Sie können auf erweiterte Auswahloptionen zugreifen, indem Sie mit der rechten Maustaste auf das Rahmenzeitdiagramm klicken.
Klicken Sie auf die Schaltfläche Speichern, um Ihre Analysedaten als .pdata-Datei zu speichern. Beachten Sie, dass es zwei Dateiformate gibt - eine Profile Analyzer-Speicherdatei (.pdata) und eine Profiler-Speicherdatei (.data oder .raw). Wir empfehlen, beide Dateien im gleichen Verzeichnis zu speichern.
Die Frame-Zusammenfassung (auf der rechten Seite des Profilanalysator-Fensters) zeigt Highlights der Frame-Zeit an, einschließlich des Minimums, des Maximums und des Medians, und enthält Schaltflächen, mit denen Sie zu bestimmten Frames im Profiler springen können. In diesem Bereich werden auch das Histogramm der Bildzeitverteilung sowie ein Box-and-Whisker-Diagramm angezeigt.
Details zur Markierung
In diesem Abschnitt finden Sie die Marker-Tabelle mit den Marker-Daten aus dem Profiler, einschließlich aller Stack-Tiefen. Die Unity Profiler-Daten für alle Marker werden aggregiert, um den Median und andere Frame-Zeiten zu erhalten, die ebenfalls in dieser Tabelle angezeigt werden. Es ist auch möglich, diese Details nach bestimmten "Slices" der Stapeltiefe zu filtern.
Marker Zusammenfassung
Der Bereich Marker-Zusammenfassung auf der rechten Seite enthält aggregierte Informationen über die ausgewählten Marker und ihren Beitrag zur Rahmenzeit. Diese Informationen werden auch visuell in einem Histogramm und einem Box-and-Whisker-Diagramm dargestellt.
Unten in der Zusammenfassung finden Sie die Mindest- und Höchstzeiten für einzelne Marker-Instanzen innerhalb des aggregierten Datensatzes.
Nach Name
Sie können eine Teilzeichenkette oder eine Sammlung von Teilzeichenketten eingeben, um Ihre Überprüfung auf Markierungen mit einem bestimmten Namen zu konzentrieren. Wenn der Name Leerzeichen enthält, müssen Sie die Teilzeichenkette in Anführungszeichen setzen.
Sie können die Marker, die Sie nicht interessieren, ausschließen. Sie können z. B. Markierungen ausschließen, die auf der Leerlaufzeit in Jobs basieren, oder die Markierungen, die Teil des Profilers selbst sind.
Sie können Markierungsfilter auch auffüllen, indem Sie mit der rechten Maustaste auf eine interessante Markierung in der Tabelle klicken und sie zur Filterauswahl hinzufügen.
Filter entfernen
Sie können auch einen Marker und alle untergeordneten Proben unter diesem Marker aus den Daten ausblenden, sowohl in den Tabellen als auch im Diagramm. Diese Option dient in erster Linie zum Entfernen von VSync/Wartezeit auf iOS- und Android-Geräten. Zwei gängige Markierungen sind bereits vorkonfiguriert und können über das Dropdown-Menü mit der Bezeichnung entfernt werden: Keine. Diese Markierungen werden als FPS Wait und Present Wait bezeichnet. Für fortgeschrittene Anwendungsfälle können Sie Markierungen entfernen, indem Sie die Option Markierung entfernen aus dem Rechtsklick-Kontextmenü auswählen.
Sie können jeweils nur eine Markierung entfernen; Sie können eine Markierung wieder hinzufügen, indem Sie in der Dropdown-Liste die Option Keine auswählen.
Fäden
Sie können sich die Daten für bestimmte Worker-Threads anzeigen lassen. Um alle zu sehen, markieren Sie "Alle" oben im Pop-up-Fenster für die Themenauswahl.
Tiefe
Wir empfehlen, die Tiefe 3 zu betrachten, da die meisten Unity-Subsysteme High-Level-Marker auf dieser Ebene haben. Auf diese Weise sehen Sie den Beitrag von wichtigen Subsystemen wie Rendering, Animation und Physik. (Tiefe 3 ist für die jüngsten Veröffentlichungen von Unity geeignet. Bei älteren Versionen sollten Sie zu einer anderen Tiefe wechseln).
Elternteil
Um nach dem übergeordneten Element zu filtern, klicken Sie mit der rechten Maustaste auf die Markierung in der Markierungstabelle und wählen Sie Als übergeordneter Markierungsfilter festlegen.
Analyse Typ
Standardmäßig zeigt der Profile Analyzer die Gesamtzeit für die Markierungen an, Sie können aber auch die Eigenzeit anzeigen lassen. Die Eigenzeit ist nützlich, wenn Sie die Details aufschlüsseln möchten, um zu sehen, wofür Sie Ihre Zeit wirklich aufwenden.
Einheiten
Die Standardeinheit ist Millisekunden, aber für kleinere Zeitabstände können Sie zu Mikrosekunden wechseln.
In diesem Teil des Fensters werden die 10 wichtigsten Marker für die von Ihnen ausgewählten Filter angezeigt. Am besten verwenden Sie dieses Tool, indem Sie den Haupt-Thread und die Gesamtzeit für den Analyse-Typ auswählen, einschließlich der Kinder auf Tiefe 3, so dass Sie die Unity-Subsysteme betrachten können. Dies zeigt Ihnen das Verhältnis der Beiträge für jedes dieser Schlüsselsysteme, wie z. B. Rendering versus Physik versus Animationszeit.
Verwenden Sie in der Vergleichsansicht das Dropdown-Menü Verhältnis, um einzustellen, wie der Profile Analyzer die Marker zueinander in Beziehung setzt:
Normalisiert zeigt die beiden Datensätze relativ zu ihrer eigenen Zeit in der ausgewählten Tiefe an.
Longest zeigt die absolute Differenz zwischen den beiden Sets in der ausgewählten Tiefe an.
Für weitere Berichte und Analysen können Sie mit dem Mauszeiger über die Datenleiste fahren, um die genauen Prozentsätze und Metriken zu sehen.
Oben im Fenster des Profilanalysators können Sie auf die Registerkarte Vergleichen wechseln, um zwei Datensätze für die Analyse auszuwählen. Ein Datensatz wird in blau, der andere in orange dargestellt. Sie können aber auch zwei Teilbereiche eines einzelnen Datensatzes miteinander vergleichen, z. B. um Ihre Median-Frames mit Ihren Ausreißer-Frames zu vergleichen.
Die Tabelle "Markervergleich" stellt die Daten visuell in Blau und Orange dar, so dass Sie schnell überprüfen können, welcher Ihrer beiden Datensätze in bestimmten Bereichen langsamer läuft.
Wenn die Markierung in einem der Scans nicht vorhanden ist, wird in dieser Spalte ein Strich angezeigt. Dies kann passieren, wenn die Markierung umbenannt wurde, zum Beispiel wenn Sie verschiedene Unity-Versionen verwenden.
Denken Sie daran, dass Sie die Daten aus dem Profile Analyzer zur weiteren individuellen Bearbeitung in das CSV-Dateiformat exportieren können. Sie können den Inhalt der Markierungstabelle, das Bildzeitdiagramm, die Vergleichstabelle oder einen Vergleich von Bildzeitdiagrammen exportieren.
Wenn Sie Fragen zum Profile Analyzer oder zum Profiler haben oder wissen möchten, wie Sie die spezifischen Funktionen für Ihr Projekt nutzen können, beteiligen Sie sich an den Diskussionen in den Foren.
Durch die Erstellung von Profilen und die Optimierung der Leistung Ihres Spiels auf einer Vielzahl von Plattformen und Geräten können Sie Ihren Erfolg besser planen und Ihre Spielerbasis erheblich erweitern.
Wie bereits zu Beginn dieses Artikels erwähnt, ist das E-Book Ultimative Anleitung zum Profiling von Unity-Spielen bietet viele weitere Anleitungen zum Profiling Ihrer Unity-Projekte.
Sie können sich auch diese Sitzung von Unite Copenhagen ansehen. Er ist zwar von 2019, bietet aber immer noch tolle Tipps zum Profile Analyzer.
Schließlich finden Sie alle fortgeschrittenen Leitfäden und Artikel von Unity im Best Practices Hub.