Anpassen der Leistungsmetriken im Unity Profiler

Um Ihre Anwendung zu optimieren, müssen Sie in der Lage sein, genau zu messen, wie Ihr Projekt Hardware-Ressourcen verbraucht. Wenn Sie den Unity Profiler um Ihre eigenen Leistungsmetriken erweitern, können Sie die einzigartige Leistungsgeschichte Ihrer Anwendung besser verstehen. In diesem Beitrag werden wir die neuen Profiler-Erweiterungsfunktionen in Unity 2021 LTS vorstellen.
Unsere neuen Profiler-Zähler bieten einen leichtgewichtigen Mechanismus, mit dem Sie Ihren Unity-Anwendungen und -Paketen eigene Performance-Metriken hinzufügen können. Sie können Ihre Metriken jetzt auch direkt im Profiler-Fenster visualisieren, indem Sie Ihre eigenen Profiler-Module hinzufügen. Lesen Sie weiter, um mehr darüber zu erfahren, wie Sie diese Funktionen nutzen können, um die Leistung Ihres Unity-Projekts zu verbessern.
Der Unity Profiler ist ein Tool, mit dem Sie detaillierte Leistungsinformationen über Ihre Anwendung erhalten können. Es verfolgt eine große Anzahl von Leistungsmetriken in einer Reihe von Kategorien, wie z.B. Speicher, Audio und Rendering. Diese Metriken werden im Profiler-Fenster visualisiert und können in einigen Fällen auch per Skript abgefragt werden. Anhand dieser Informationen erhalten Sie Einblicke in die Nutzung der verfügbaren Hardwareressourcen der Zielplattform durch Ihre Unity-Anwendung und können so feststellen, wo Optimierungen vorgenommen werden könnten.

Profiler-Zähler verfolgen, messen oder zählen Metriken in Ihrer Unity-Anwendung, die für die Leistungsanalyse nützlich sind. So definiert Unity beispielsweise einen eingebauten Profiler-Zähler, der die Gesamtzahl der von Ihrer Anwendung genutzten Speicherbytes erfasst, den sogenannten "Total Used Memory". Dies ist eine nützliche Statistik, um den Speicherbedarf Ihrer App auf dem Zielgerät zu messen. Sie können diesen Wert im Laufe der Zeit zusammen mit anderen speicherbezogenen Metriken im Speichermodul des Profiler-Fensters sehen (siehe unten).

Wenn Sie Ihre eigenen Profiler-Zähler hinzufügen, können Sie Leistungskennzahlen für Ihre eigenen Systeme und Anwendungen anzeigen lassen. Diese Metriken können im Profiler-Fenster zusammen mit anderen Leistungsdaten, einschließlich integrierter Zähler, angezeigt werden. Auf diese Weise können Sie die Leistungsmerkmale Ihrer Anwendung im Kontext direkt im Profiler-Fenster betrachten.
In dem folgenden Beispiel wurde ein benutzerdefinierter Profiler-Zähler hinzugefügt, um die Anzahl der aktiven Kreaturen in einer Szene zu verfolgen. Sie wird neben dem integrierten Profiler-Zähler Batches Count angezeigt, der die Anzahl der pro Frame verarbeiteten Rendering-Batches verfolgt. Auf diese Weise können wir die beiden Metriken leicht miteinander in Beziehung setzen und sehen, wie sich die Anzahl der Kreaturen auf die Anzahl der Batches auswirkt, die der Renderer verarbeiten muss.

Darüber hinaus sind alle Ihre Profiler-Zähler in Release Builds verfügbar, ebenso wie einige der integrierten Zähler, sofern angegeben. Release Builds sind repräsentativer für die reale Leistung Ihrer Anwendung als Development Builds.
Der Unity Profiler kann jedoch aus Optimierungsgründen nicht an Release Builds angehängt werden. Daher können Sie wichtige Metriken in Release Builds selektiv überwachen, indem Sie Profiler-Zähler verwenden und diese über ein Skript abfragen. Sie können dies zum Beispiel bei Continuous Integration Tests tun, um Leistungsrückschritte zu erkennen. Oder Sie können einige wichtige Leistungskennzahlen über eine Debug-Benutzeroberfläche im Spiel anzeigen, die eines der UI-Systeme von Unity verwendet, wie in der unteren linken Ecke des folgenden Beispiels. Weitere Informationen finden Sie in der Dokumentation zum Profiler Recorder.

Wenn Sie möchten, dass Ihre Profiler-Zähler nur in Development Builds vorhanden sind, können Sie sie von Release Builds ausschließen, indem Sie sie in das Skriptsymbol DEVELOPMENT_BUILD einschließen, wie in der Dokumentation zur bedingten Kompilierung beschrieben.
Unsere Profiler-Zähler sind im Paket Profiling.Core verfügbar, das in Unity 2021 LTS veröffentlicht wurde. Das Paket ist mit Unity 2021 LTS gebündelt, aber nicht standardmäßig installiert. Bitte folgen Sie den Installationsanweisungen in der Paketdokumentation, um dieses Paket über den Paketmanager namentlich hinzuzufügen.
Sobald Sie das Paket haben, können Sie einen Profiler-Zähler erstellen, der in der API als ProfilerCounter oder ProfilerCounterValue bezeichnet wird, und ihn wie folgt aktualisieren.
using UnityEngine;
using Unity.Profiling;
public class CreatureCounter : MonoBehaviour
{
static readonly ProfilerCounterValue<int> k_CreatureCounter = new(ProfilerCategory.Scripts, "Creature Count",
ProfilerMarkerDataUnit.Count, ProfilerCounterOptions.FlushOnEndOfFrame);
void OnEnable()
{
k_CreatureCounter.Value += 1;
}
void OnDisable()
{
k_CreatureCounter.Value -= 1;
}
}
cs
Weitere Informationen finden Sie in der Dokumentation zum Paket Profiling.Core.
Ein Profiler-Modul stellt Leistungsinformationen für einen bestimmten Bereich oder Arbeitsablauf im Profiler-Fenster dar, z.B. Speicher, Audio oder Rendering. Jedes Profiler-Modul zielt darauf ab, einen Einblick in das Leistungsprofil des jeweiligen Bereichs zu geben. Das unten gezeigte Modul Memory Profiler zeigt beispielsweise sieben wichtige Metriken zur Speichernutzung im Laufe der Zeit an. Darunter befindet sich der Detailbereich des Moduls, der die Verteilung des Speichers im ausgewählten Frame anzeigt.

In Unity 2021 LTS kann das Profiler-Fenster mit Ihren eigenen Profiler-Modulen angepasst werden. So können Sie die Leistungskennzahlen Ihrer eigenen Systeme direkt im Profiler-Fenster anzeigen. Es bietet Ihnen auch die Möglichkeit, in der Detailansicht Ihres Moduls eine benutzerdefinierte Visualisierung vorzunehmen, mit der Sie die Leistungsdaten Ihres Systems nach Belieben darstellen können.
Profiler Modul-Editor
Der Profiler-Modul-Editor wird empfohlen, um schnell temporäre Profiler-Module für Ihren eigenen Gebrauch zu erstellen. Sie können damit zum Beispiel schnell ein Profiler-Modul erstellen, um einen neuen Profiler-Zähler zu überprüfen. Profiler-Module, die mit dem Profiler-Modul-Editor erstellt wurden, sind auf Ihren Editor beschränkt und für andere Projektbenutzer nicht verfügbar.

Weitere Informationen finden Sie in der Dokumentation zum Modul-Editor.
Profiler-Modul API
Mit der Profiler-Modul-API können Sie Ihr eigenes Profiler-Modul zum Profiler-Fenster für alle Benutzer eines Projekts oder Pakets hinzufügen. Wenn ein Profiler-Modul in einem Projekt oder Paket mit dieser API definiert wird, ist es automatisch im Profiler-Fenster für alle Benutzer dieses Projekts oder Pakets verfügbar.
Wenn Sie ein Asset Store-Herausgeber oder ein Paketentwickler sind, können Sie jetzt benutzerdefinierte Profiler-Module mit Ihrem Paket verteilen. Wenn ein Benutzer Ihr Paket installiert, werden Ihre Profiler-Module automatisch im Profiler-Fenster für Ihre Benutzer verfügbar. So können Sie die Leistungsdaten Ihres Pakets direkt im Profiler-Fenster anzeigen lassen.
Mehrere Teams in Unity haben diese API bereits genutzt, um benutzerdefinierte Profiler-Module mit ihren Paketen zu verteilen, darunter die Pakete Netcode for GameObjects, Adaptive Performance und Mali System Metrics.
Wie man es benutzt
Um ein Profiler-Modul mithilfe der Profiler-Modul-API hinzuzufügen, erstellen Sie ein ProfilerModule-Skript in Ihrem Projekt oder Paket, wie unten gezeigt.
using Unity.Profiling;
using Unity.Profiling.Editor;
[System.Serializable]
[ProfilerModuleMetadata("Creature Batches")]
public class CreatureBatchesProfilerModule : ProfilerModule
{
static readonly ProfilerCounterDescriptor[]
k_Counters = {
new("Creature Count", ProfilerCategory.Scripts),
new("Batches Count", ProfilerCategory.Render), };
public CreatureBatchesProfilerModule() : base(k_Counters) { }
}
cs
Das Modul wird automatisch im Profiler-Fenster für alle Benutzer des Projekts oder Pakets angezeigt.

Weitere Informationen zur Verwendung des Profiler-Moduls API finden Sie im Handbuch und in der API-Dokumentation.
Die API des Profiler-Moduls bietet die Möglichkeit, eine benutzerdefinierte Visualisierung Ihrer Leistungsdaten für den ausgewählten Frame mit einem der Editor-UI-Systeme von Unity, wie z.B. UI Toolkit, zu zeichnen.
Das Profiler-Modul des Adaptive Performance-Pakets beispielsweise nutzt diese API, um detaillierte Leistungsinformationen im ausgewählten Frame sowie kontextbezogene Informationen wie Bottleneck- und Thermal Warning-Indikatoren anzuzeigen. Anhand dieser Indikatoren kann ein Benutzer des Adaptive Performance-Pakets klar erkennen, wann er beispielsweise auf thermische Drosselung stößt. Sie können diese API verwenden, um eine maßgeschneiderte Visualisierung der Leistungsdaten Ihres Profiler-Moduls zu präsentieren.

Weitere Informationen finden Sie im Handbuch und in der API-Dokumentation zur Erstellung einer benutzerdefinierten Profiler-Modul-Detailansicht.
Vielleicht möchten Sie in Ihren Profiler-Modulen neben den Profiler-Zählern noch weitere, komplexere Daten visualisieren. So können Sie z.B. einen Screenshot des aktuellen Frames in der Detailansicht Ihres Profiler-Moduls anzeigen, um den Leistungsdaten mehr Kontext zu verleihen, wie unten gezeigt.

Um zusätzliche Frame-Daten an den Profiler zu senden, z.B. ein Bild, und diese anschließend aus der Profiler-Aufnahme abzurufen, können Sie die Frame-Metadaten-APIs, Profiler.EmitFrameMetaData und FrameDataView.GetFrameMetaData verwenden.
Wenn Sie zusätzliche Daten haben, die nur einmal pro Profilerstellungssitzung gesendet werden müssen, wie z.B. Konfigurationsdaten, können Sie die APIs für Sitzungsmetadaten, Profiler.EmitSessionMetaData und FrameDataView.GetSessionMetaData verwenden.
In der oben verlinkten Dokumentation finden Sie Beispiele dafür, wie und wann Sie diese Funktionen nutzen können.
In diesem Beitrag haben wir uns damit beschäftigt, wie Sie den Unity Profiler um Ihre eigenen Leistungskennzahlen erweitern können. Wir haben uns das Hinzufügen von benutzerdefinierten Metriken mit unseren neuen Profiler-Zählern angesehen, die in der Datei Profiling.Core Paket verfügbar sind. Anschließend haben wir uns mit dem Hinzufügen von benutzerdefinierten Profiler-Modulen zum Profiler-Fenster beschäftigt, sowohl mit dem Profiler-Modul-Editor als auch mit der Profiler-Modul-API. Schließlich haben wir uns mit dem Senden zusätzlicher komplexer Daten an den Profiler befasst, z. B. eines Bildes, um mehr kontextbezogene Informationen zu erhalten.
Wir hoffen, dass diese in Unity 2021 LTS hinzugefügten Profiler-Erweiterungsfunktionen es Ihnen ermöglichen, die einzigartige Leistungsgeschichte Ihrer Anwendung besser zu messen und zu verstehen. Bitte wenden Sie sich über unsere Forumsseite an unser Team. Wir würden gerne Ihr Feedback hören und erfahren, wie wir das Performance-Tooling von Unity für Sie verbessern können.