Unity: 10.000 Update-Aufrufe bremsen die Spiellogik

Unity hat am 23. Dezember 2015 untersucht, wie stark 10.000 MonoBehaviour-Komponenten mit einer Update-Methode die Laufzeit eines Spiels belasten. Der offizielle Entwicklerbeitrag zeigt, dass der eigentliche Methodenrumpf nur einen kleinen Teil der gemessenen Zeit ausmacht.

Die Engine sucht eine Update-Methode nicht bei jedem Frame über Reflection. Unity prüft ein Skript beim ersten Zugriff und führt passende Methoden danach über interne Listen aus. Der Aufruf aus dem nativen C++-Teil in die verwaltete C#-Laufzeit bleibt trotzdem ein eigener Kostenpunkt. Das gilt auch für leere Methoden, die nur über eine gemeinsame Basisklasse in die Update-Listen gelangen.

Verwaltungsarbeit kostet mehr als die Methode

Für den Test erzeugte Unity 10.000 MonoBehaviour-Instanzen. Eine Szene rief Update direkt auf, in einer zweiten Szene verwendete ein Manager eine eigene UpdateMe-Methode. Getestet wurde auf zwei iOS-Geräten mit Unity 5.2.2f1 und iOS 9, jeweils mit Mono und IL2CPP in einer Release-Konfiguration. Die Messung lief über mehrere Minuten und bildete die Zeit zwischen Update und LateUpdate ab.

In einer IL2CPP-Aufzeichnung summierte sich die CPU-Zeit für einen betrachteten Abschnitt auf 9.979 Millisekunden. Das Durchlaufen der Behaviours beanspruchte davon 1.517 Millisekunden, Prüfungen auf gültige und aktive Objekte weitere 2.188 Millisekunden. Die Vorbereitung des Aufrufs schlug mit 2.061 Millisekunden zu Buche. Die eigentliche Update-Methode benötigte in dieser Messung 42 Millisekunden.

Array und Manager statt leerer Update-Methoden

Der Manager-Ansatz umgeht einen Teil dieser Verwaltungsarbeit, ist aber nicht vollständig mit Unitys eingebauter Behandlung vergleichbar. Das Beispiel prüft nicht alle Fälle, die Unity absichert, etwa zerstörte GameObjects oder während des Update-Durchlaufs erzeugte Objekte. Im Test lief die eigene Schleife zudem schneller über ein Array als über eine List. Unity nennt für die Array-Variante auf Mono eine Messung von 0,23 Millisekunden.

Für Projekte mit sehr vielen Objekten ist damit die Architektur der Spiellogik ein messbarer Performance-Faktor. Ein früherer Beitrag zu Unity 5.1 behandelte bereits die Rendering- und VR-Seite der Engine. Der neue Test verschiebt den Blick auf die Kosten vieler kleiner Skriptaufrufe und empfiehlt, solche Strukturen früh in der Projektplanung zu prüfen.

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein