Wann sollte ich GameObjects als statisch markieren?

9

Hier ist die entsprechende Unity-Dokumentation .

Gemäß den Erläuterungen auf den Unity-Dokumentationsseiten zu statischen GameObjects kann das Markieren von GameObjects als statisch die Leistung beeinträchtigen (z. B. führt statisches Batching zu einer höheren Speichernutzung) .

Wann sollte ich diese Funktionen genau nutzen wollen?

Danke im Voraus.

Fußnoten:
Ich entwickle derzeit ein 2D-Top-Down-Spiel mit vielen Sprites und LineRenderern, aber keinen 3D-Objekten (nicht einmal einem Quad). Alle GameObjects werden prozedural aus vorgefertigten Fertighäusern instanziiert. LineRenderer werden in jedem Frame aus Skripten aktualisiert. Und fast alle Sprites bewegen sich ständig. Die Mehrheit der Sprites teilt das gleiche Material. Alle LineRenderer teilen auch ihr eigenes Material.

S. Tarık Çetin
quelle
1
NICHT FÜR BÄUME IN WÄLDERN. Wir wurden von diesem Bösen gebissen. LANGE Bauzeiten, MASSIVE Daten in Ihren Levels. Hinweis: In den Dokumenten hierzu wird ausdrücklich darauf hingewiesen, dass Sie es nicht für Gesamtstrukturen verwenden sollten. :)
Almo
@ Almo Ich bin mit Jungen, kann diesen Schmerz verstehen
Hamza Hasan

Antworten:

6

Es gibt keine feste Regel, wann Sie GameObjects statisch machen sollen oder nicht.

Zumindest nur für Objekte, die sich in ihrem Leben niemals bewegen werden. Aber Sie müssen wissen, was es tut, um zu bewerten, ob Sie sollten oder nicht.

Das Netz wird in den Szenendaten eingefroren, sodass Sie nicht den Overhead des GameObject für das Objekt haben. Dies bedeutet eine Leistungssteigerung auf Kosten der Änderung der Szenendaten zur Erstellungszeit und zusätzliche Speicherkosten für die endgültig erstellte Anwendung.

Dies ist in vielen Fällen in Ordnung, kann jedoch Probleme verursachen, beispielsweise bei Wäldern. Dies bedeutet auch, dass anstatt die Verts für den Baum einmal zu speichern und die GPU-Zeichnungskopien, diese Verts überall dupliziert werden müssen. Das braucht Zeit während des Builds und Platz in der App. Unsere App ging von 3-4 GB auf 300-400 MB, als wir die Bäume nicht statisch machten. Die Bauzeit stieg von 3-4 Stunden auf 1 Stunde.

Nachdem ich das alles gesagt habe! Ihr Spiel ist 2d und würde wahrscheinlich davon profitieren, GameObjects in Szenen auf statisch zu setzen, vorausgesetzt, Sie haben nicht Tonnen davon.

Almo
quelle
Werden vorinstallierte Statiken nicht auch Instanzen statisch?
S. Tarık Çetin
Nicht, wenn Sie sie zur Laufzeit instanziieren ... Wie können diese "statisch" sein? Vielleicht irre ich mich ... werde nachsehen.
Almo
2
Ich habe gerade bestätigt, dass instanziierte Instanzen auch statisch sind, wenn Fertighaus als statisch markiert ist.
S. Tarık Çetin
1

Wenn ich allgemein sage, sollte alles, was sich im gesamten App-Leben niemals bewegen wird (nicht einmal ein Pixel), als statisch markiert werden. Normalerweise ist es nützlich zum Backen von Lichtern, Backen von Navmesh-Pfaden usw.

Wenn Sie ohne 3D-Objekte entwickeln, entspannen Sie sich und entspannen Sie sich. Sie müssen sich keine Gedanken über Echtzeit-Rendering, Schatten oder andere Probleme machen. Auch das Löschen des einzigen Lichts kommt mit neuer Szene;)

Nun, jeder kann mich korrigieren, wenn ich mich irgendwo irre.

Hamza Hasan
quelle
3
Das ist wirklich falsch für Sachen wie Wälder. Es reduziert Drawcalls ... aber es backt alle Bäume in das Netz. Das bedeutet, dass anstatt die Verts für den Baum einmal zu speichern und die GPU-Zeichnungen zu kopieren, diese Verts überall dupliziert werden müssen. Das braucht Zeit während des Builds und Platz in der App. Unsere App ging von 3-4 GB auf 300-400 MB, als wir die Bäume nicht statisch machten.
Almo
@ Almo huggggeeeeee Unterschied
Hamza Hasan
Ich denke, Sie sollten zu Beginn Ihrer Antwort klarstellen, dass Sie dies nur empfehlen, weil es sich um ein 2D-Spiel handelt.
Almo
@Almo Dank dir denke ich jetzt, dass statisches Dosieren eine schädliche Sache ist, wie ein Ofen, bei dem du nicht sicher sein kannst, ob es heiß ist oder nicht. :)
S. Tarık Çetin
@Almo zögern Sie nicht, diesen Bruder zu bearbeiten, wenn Sie dies benötigen. Gehen Sie voran
Hamza Hasan