Optimierung der Einheit: Wie die Hierarchie der Szenen Sie stiehlt

Sie haben also die offensichtlichsten Teile Ihres Spiels optimiert. Dies ist jedoch tatsächlich nicht der Fall. Sie haben einen kniffligen, nicht ganz erkennbaren Punkt übersehen: die Optimierung der Unity-Szenenhierarchie.

Und was ist falsch an der Hierarchie? Lass mich dir etwas zeigen.

Starten Sie Unity und öffnen Sie Ihr Spielprojekt. Führen Sie dann das Spiel auf dem Zielgerät aus
und verbinden Sie Unity Profiler damit. Nehmen Sie während des Spiels einige Frames auf.

Suchen Sie in Unity Profiler nach den folgenden unangenehmen Profiler-Markierungen :


Nicht gefunden? Suchen Sie weiter, ich bin sicher, dass es mindestens einen gibt.

Dies können UpdateRendererBoundingVolumes , Physics.SyncColliderTransform oder TransformChangedDispatch sein .

Sie werden angezeigt, wenn Sie bereit sind, aufzugeben. Sie treten auf, wenn Sie den Mauszeiger bereits über die Schaltfläche zum Schließen des Profilers bewegen.

Hast du gefunden? Wenn ja, haben Sie Glück. Ich habe sie auch in einem meiner vorherigen Projekte gefunden und herausgefunden, wie ich sie komplett loswerden kann. Mir wurde klar, was Böses in ihnen verborgen ist ...

Möchten Sie die Geheimnisse der Leistung der Unity-Szenenhierarchie kennenlernen ?

Level 1 Entwickler: Typische Unity Scene Hierarchie


Ich erinnere mich noch an das erste Unity-Projekt, an dem ich vor über zehn Jahren gearbeitet habe.

Ich kannte den Unterschied zwischen Spielobjekten und Komponenten noch nicht wirklich.

Aber es war egal, ich habe immer noch Spiele erstellt.

Bild

War mir eine so chaotische Hierarchie der Einheitsszene vertraut? Eigentlich ja, weil es manchmal viel schlimmer war. Es ist jedoch merkwürdig, dass auf diese Art von Hierarchie häufig verzichtet werden kann. Aber du wirst leiden. Sie müssen später dafür bezahlen.

Glücklicherweise lernte ich, bevor ich anfing, Spiele professionell zu entwickeln, strukturiertere Hierarchien zu schätzen.

Die Qualitätsstruktur der Szenenhierarchie kann Ihr bester Freund sein. Die Struktur vereinfacht die Entwicklung und Zusammenarbeit erheblich.

Es muss nicht perfekt sein, was auch immer das bedeutet. Es reicht ihr, gut zu sein. Aber sei vorsichtig. Es ist wichtig.

Eine überfüllte Hierarchie der Szene ist gefährlich und verursacht Probleme, da es sehr unwahrscheinlich ist, dass Sie die Nebenwirkungen direkt bemerken.

Ein furchterregender Geist wird dich verfolgen, dich verlangsamen und dich zurückziehen. Manchmal wirst du zurückblicken, aber es wird nichts dahinter sein. Deshalb werden Sie sich daran gewöhnen, sich langsam zu bewegen.

Im Laufe der Jahre habe ich gelernt, diese Nebenwirkungen zu diagnostizieren. Das Hauptproblem ist, dass die Nebenwirkungen einer chaotischen Hierarchie nicht so einfach zu verfolgen sind.

Sie sehen den Profiler, wissen aber nicht, was die Marker bedeuten. Ihre Namen sind oft rätselhaft ... Welche Geheimnisse bewahren sie auf? Es gibt nur eines, dessen Sie sich sicher sein müssen: Die mysteriösen Markierungen verraten uns etwas, das es wert ist, erkundet zu werden.

Wenn wir über die Verbesserung der Szenenstruktur sprechen, meinen wir normalerweise die Verbesserung der Verständlichkeit und die Senkung der Supportkosten. Aber alle vergessen die Leistung.

Lassen Sie uns die oben gezeigte Szenenhierarchie analysieren. Es enthält 2.000 ineinander verschachtelte rotierende Kugeln .

Was wird der Profiler dazu sagen? Mal sehen

Bild

Optimierung der Unity-Szenenhierarchie: Übersicht über den Hierarchie-Profiler

Sehr schlechte Leistung für ein einfaches Fertighaus und ein Rotationsskript, das auf eine reguläre Kugel angewendet wird. Wie Sie sehen, nehmen Physics.SyncColliderTransform und UpdateRendererBoundingVolumes einen großen Teil des Rahmenzeitbudgets ein. Aber lassen Sie uns die Analyse nicht zu Ende bringen, denn ich bin sehr neugierig auf diesen Fall.

Lass uns tiefer gehen.


Details zum Hierarchie-Profiler

Hier ist die Antwort auf die Frage des Artikels.

Nicht optimierte Hierarchien verursachen in Unity zwei BIG-Probleme.

  • Tiefe Hierarchien verhindern, dass das Jobsystem effizient parallel arbeitet
  • Verschachtelte Hierarchien lösen in einigen Unity-Subsystemen Engpässe aus.

Vergessen Sie das nicht, denn es gilt für alle Arten dynamischer Objekte und insbesondere für Benutzeroberflächen.

Als Referenz: Ich arbeite an Threadripper mit 16 physischen Kernen und 32 Threads. Wissen Sie, wie viele von ihnen in diesem Projekt effektiv arbeiten? Nur einer.

Darunter leidet natürlich die Spieleleistung. Und wenn Sie versuchen, die Situation zu korrigieren, indem Sie all diese mysteriösen Namen verstehen, werden Sie frühzeitig alt.

Was würde ein Level 2 Entwickler mit 2.000 Objekten machen?

Level 2 Entwickler: Optimierte Unity-Szenenhierarchie


Ein Unity-Entwickler der Stufe 2 weiß, dass Kindertransformationen einen Preis haben. Er weiß auch, dass der Preis in diesem Fall die Millisekunden der CPU-Zeit ist. Oder die zusätzlichen Arbeitsstunden des Entwicklers, um dieses Problem zu lösen.

Fragen Sie sich: Reicht das CPU-Zeitbudget aus, um eine so umfangreiche Hierarchie zu finanzieren?

Aus welchem ​​Bereich Ihres Spiels nehmen Sie diese Millisekunden?

Wird dies die Anzahl der schönen Partikel reduzieren müssen? Oder die Anzahl der Monster, gegen die ein Spieler kämpfen muss? Ich hoffe, Sie müssen nichts davon tun, aber besser ...

Erstellen Sie effektive Szenenhierarchien und zerstören Sie suboptimale.

Der Grund, warum die komplexe Verschachtelung von untergeordneten Objekten Spielressourcen stiehlt, ist einfach: Jede Änderung, die vorgenommen wird, wirkt sich auf die Kinder und möglicherweise auch auf die Eltern mit den Geschwistern aus.

Wenn Sie die Position, Drehung oder Skalierung eines Objekts ändern, werden in Unity viele Aspekte berücksichtigt. Die Engine tut dies von selbst, so dass Sie sich auf das Spiel konzentrieren können. Das ist großartig, aber wenn Sie nichts darüber wissen, kann der Preis astronomisch werden.

Was ist die Lösung? Halten Sie die Dinge einfach und halten Sie sich an die goldenen Regeln einer sauberen Unity-Szenenhierarchie:

  • Maximal 50 Kinder pro Spielobjekt
  • Nicht mehr als 4 Verschachtelungsstufen auf einem Spielobjekt.

Ist das nicht einfach Level 2-Entwickler erstellen so flache Hierarchien von Unity-Szenen wie möglich.

Schauen Sie sich das Bild unten an. Die gleiche Anzahl von Objekten, diesmal jedoch in einer flachen Hierarchie strukturiert.


Die Einsparungen sind enorm.

Aber leichter gesagt als getan, nicht wahr? Die Trennung und Zerstörung von Beziehungen zwischen Objekten ist mühsam, fehleranfällig und langwierig.

Was würde ein Level 3 Entwickler tun?

Level 3 Entwickler: FAP Hierarchy Tool


Ein guter Unity-Entwickler erledigt den Job. Ein großartiger Unity-Entwickler erledigt die Arbeit schneller und genauer. Aber wie gelingt es ihm? Mit Hilfe von Werkzeugen. Da die einzige billige Hierarchie die leere Hierarchie ist, müssen Sie die folgenden Fragen beantworten, um das Spiel zu bewerten ...

Wie komplex sind Ihre Hierarchien?

Diese Frage kann beantwortet werden, indem Hierarchien methodisch analysiert und numerisch bewertet werden.


Welche mathematischen Formeln werden benötigt, um diese Schätzung zu berechnen? Zum Glück keine. Ich habe alles für dich getan. Ich habe ein Prototyp-Tool zur automatischen Analyse und Erkennung von Engpässen in Ihrer Hierarchie auf der Grundlage der oben genannten goldenen Regeln geschrieben.

Ich habe dieses fabelhafte Tool für erweiterte Profilhierarchie aufgerufen. Starte das Spiel. Kommen Sie zu einem interessanten Moment. Öffnen Sie das Tool und lassen Sie es den Rest erledigen.


Das Tool gibt Ihnen eine ganzzahlige Bewertung. Sobald Sie die Partitur kennen, werden Sie wissen, was zu tun ist ... oder nicht?

Denn ich gebe Ihnen nicht nur dieses Tool, sondern auch ein zusätzliches Skript, mit dem Sie Ihre Fähigkeit stärken können, Probleme mit Hierarchien zu beseitigen. Ich gebe Ihnen die Kraft eines einfachen DetachGameObject.cs- Skripts.

Es ist selten, ein Skript mit 27 Zeilen zu finden, mit dem sich die Leistung in so kurzer Zeit verbessern lässt. Seine Arbeit ist einfach: Während der Programmausführung werden schwere und eingebettete Spielobjekte an die Wurzel der Szenenhierarchie verschoben. Aus diesem Grund profitieren Sie zur Entwurfszeit von strukturierten Hierarchien und erzielen zur Laufzeit enorme Leistungssteigerungen .

Es ist sehr wahrscheinlich, dass Sie dies für einen großen Teil Ihrer Hierarchie tun können, die eine starke Verschachtelungsstruktur aufweist.

Sie können das Tool und das Skript am Ende des Originalartikels herunterladen.

Source: https://habr.com/ru/post/de481510/


All Articles