Optimieren Sie die Leistung Ihres Mobilspiels: Holen Sie sich Experten-Tipps zu Physik, UI und Audioeinstellungen

Unser integriertes Erfolgsteam unterstützt Unity-Kunden bei ihren komplexen technischen Problemen. Wir haben uns mit diesem Team von Senior Software Engineers zusammengesetzt und sie gebeten, ihr Fachwissen zur Optimierung mobiler Spiele zu teilen.
Unser Unity Studio Productions Team kennt den Quellcode in- und auswendig und arbeitet mit einer Vielzahl von Unity-Kunden zusammen, um ihnen zu helfen, das Beste aus der Engine herauszuholen. In ihrer Arbeit tauchen sie tief in die Projekte der Creator ein, um Punkte zu identifizieren, an denen die Leistung für mehr Geschwindigkeit, Stabilität und Effizienz optimiert werden kann.
Als unsere Ingenieure begannen, ihre Erkenntnisse zur Optimierung mobiler Spiele zu teilen, wurde uns ziemlich schnell klar, dass es viel zu viele großartige Informationen für den einzelnen Blogbeitrag gab, den wir geplant hatten. Stattdessen haben wir beschlossen, ihr Wissen in ein umfassendes E-Book (das Sie hier herunterladen können) sowie in eine Reihe von Blogbeiträgen zu verwandeln, die einige dieser 75+ umsetzbaren Tipps hervorheben.
In diesem zweiten Teil dieser Serie konzentrieren wir uns darauf, wie man die Leistung mit den UI-, Physik- und Audioeinstellungen verbessert. Falls Sie es verpasst haben, schauen Sie sich unseren vorherigen Beitrag zu Profiling, Speicher und Codearchitektur an – und bleiben Sie dran für unseren nächsten, der sich mit Assets, Projektkonfiguration und Grafik beschäftigt.
Möchten Sie alles jetzt? Laden Sie das kostenlose E-Book herunter.
Lassen Sie uns gleich loslegen!
Die integrierte Physik von Unity (Nvidia PhysX) kann auf Mobilgeräten teuer sein, aber die folgenden Tipps können Ihnen helfen, mehr Bilder pro Sekunde herauszuholen.
Überprüfen Sie im PlayerSettings die Prebake Collision Meshes, wann immer es möglich ist.

Stellen Sie sicher, dass Sie Ihre Physik-Einstellungen (Projekteinstellungen > Physik) bearbeiten und Ihre Layer Collision Matrix wo immer möglich vereinfachen.
Deaktivieren Sie Auto Sync Transforms und aktivieren Sie Reuse Collision Callbacks.


Mesh-Kollidierer können teuer sein. Ersetzen Sie komplexere Mesh-Kollidierer durch primitive oder vereinfachte Mesh-Kollidierer, um die ursprüngliche Form zu approximieren.

Verwenden Sie Klassenmethoden wie MovePosition oder AddForce, um Ihre Rigidbody-Objekte zu bewegen. Das direkte Übersetzen ihrer Transform-Komponenten kann zu Neuberechnungen der Physik-Welt führen, die in komplexen Szenen teuer sind. Bewegen Sie physikalische Körper in FixedUpdate anstelle von Update.
Der Standardwert für Fixed Timestep in den Projekteinstellungen beträgt 0,02 (50 Hz). Ändern Sie dies, um Ihre Zielbildrate anzupassen (zum Beispiel 0,03 für 30 fps).
Wenn Ihre Bildrate zur Laufzeit sinkt, bedeutet dies jedoch, dass Unity FixedUpdate mehrere Male pro Frame aufrufen würde und möglicherweise ein CPU-Leistungsproblem mit physikintensiven Inhalten verursacht.
Der Maximum Allowed Timestep begrenzt, wie viel Zeit für physikalische Berechnungen und FixedUpdate-Ereignisse verwendet werden kann, falls die Bildrate sinkt. Eine Senkung dieses Wertes bedeutet, dass während eines Leistungsengpasses die Physik und Animation langsamer werden könnten, während auch ihre Auswirkungen auf die Bildrate verringert werden.

Verwenden Sie das Physik-Debug-Fenster (Window > Analysis > Physics Debugger), um Probleme mit Kollidierern oder Abweichungen zu beheben. Dies zeigt einen farbcodierten Indikator der GameObjects, die miteinander kollidieren können.

Für weitere Informationen siehe Physik-Debug-Visualisierung in der Unity-Dokumentation.
Unity UI (UGUI) kann oft eine Quelle von Leistungsproblemen sein. Die Canvas-Komponente generiert und aktualisiert Meshes für die UI-Elemente und gibt Draw-Calls an die GPU aus. Seine Funktionsweise kann teuer sein, daher sollten Sie die folgenden Faktoren im Auge behalten, wenn Sie mit UGUI arbeiten.
Wenn Sie ein großes Canvas mit Tausenden von Elementen haben, zwingt das Aktualisieren eines einzelnen UI-Elements das gesamte Canvas zur Aktualisierung, was potenziell einen CPU-Spitzenwert erzeugen kann.
Nutzen Sie die Fähigkeit von UGUI, mehrere Canvases zu unterstützen. Teilen Sie UI-Elemente basierend darauf auf, wie häufig sie aktualisiert werden müssen. Halten Sie statische UI-Elemente auf einem separaten Canvas und dynamische Elemente, die zur gleichen Zeit aktualisiert werden, auf kleineren Unter-Canvases.
Stellen Sie sicher, dass alle UI-Elemente innerhalb jedes Canvas den gleichen Z-Wert, Materialien und Texturen haben.
Sie könnten UI-Elemente haben, die nur sporadisch im Spiel erscheinen (z. B. eine Gesundheitsanzeige, die erscheint, wenn ein Charakter Schaden nimmt). Wenn Ihr unsichtbares UI-Element aktiv ist, könnte es dennoch Draw-Calls verwenden. Deaktivieren Sie explizit alle unsichtbaren UI-Komponenten und aktivieren Sie sie bei Bedarf wieder.
Wenn Sie nur die Sichtbarkeit des Canvas ausschalten müssen, deaktivieren Sie die Canvas-Komponente anstelle des GameObjects. Dies kann das Neuaufbauen von Meshes und Vertices sparen.
Eingabeereignisse wie Bildschirmberührungen oder Klicks erfordern die GraphicRaycasterKomponente. Dies durchläuft einfach jeden Eingabepunkt auf dem Bildschirm und überprüft, ob er sich innerhalb des RectTransform einer UI befindet.
Entfernen Sie den standardmäßigen GraphicRaycaster von der obersten Canvas in der Hierarchie. Fügen Sie stattdessen den GraphicRaycaster ausschließlich zu den einzelnen Elementen hinzu, die interagieren müssen (Schaltflächen, Scrollrechtecke usw.).

Deaktivieren Sie auch Raycast Target für alle UI-Text- und Bildinhalte, die es nicht benötigen. Wenn die UI komplex ist und viele Elemente enthält, können all diese kleinen Änderungen unnötige Berechnungen reduzieren.

Layout-Gruppen aktualisieren ineffizient, verwenden Sie sie also sparsam. Vermeiden Sie sie vollständig, wenn Ihr Inhalt nicht dynamisch ist, und verwenden Sie stattdessen Anker für proportionale Layouts. Andernfalls erstellen Sie benutzerdefinierten Code, um die Layout Group Komponenten zu deaktivieren, nachdem sie die UI eingerichtet haben.
Wenn Sie Layout-Gruppen (Horizontal, Vertikal, Raster) für Ihre dynamischen Elemente verwenden müssen, vermeiden Sie es, sie zu schachteln, um die Leistung zu verbessern.

Große Listen- und Rasteransichten sind teuer. Wenn Sie eine große Listen- oder Rasteransicht erstellen müssen (z. B. einen Inventarbildschirm mit Hunderten von Elementen), ziehen Sie in Betracht, einen kleineren Pool von UI-Elementen wiederzuverwenden, anstatt für jedes Element ein UI-Element zu erstellen. Schau dir dieses Beispiel GitHub-Projekt an, um das in Aktion zu sehen.
Das Schichten vieler UI-Elemente (z. B. Karten, die in einem Kartenspiel gestapelt sind) erzeugt Überzeichnung. Passe deinen Code an, um geschichtete Elemente zur Laufzeit in weniger Elemente und Batches zu kombinieren.
Da mobile Geräte jetzt sehr unterschiedliche Auflösungen und Bildschirmgrößen verwenden, erstelle alternative Versionen der UI, um die beste Erfahrung auf jedem Gerät zu bieten.
Verwende den Gerätesimulator, um die UI auf einer Vielzahl von unterstützten Geräten vorzuschauen. Du kannst auch virtuelle Geräte in XCode und Android Studio erstellen.

Wenn dein Pause- oder Startbildschirm alles andere in der Szene abdeckt, deaktiviere die Kamera, die die 3D-Szene rendert. Deaktiviere auch alle Hintergrund-Canvas-Elemente, die hinter dem oberen Canvas verborgen sind.
Ziehe in Betracht, die Application.targetFrameRate während einer Vollbild-UI zu senken, da du nicht mit 60 fps aktualisieren musst.
Wenn du das Feld Event oder Render Camera leer lässt, zwingt du Unity, Camera.main auszufüllen, was unnötig teuer ist.
Ziehe in Betracht, Screen Space – Overlay für deinen Canvas RenderMode zu verwenden, wenn möglich, da dies keine Kamera erfordert.

Obwohl Audio normalerweise kein Leistungsengpass ist, kannst du dennoch optimieren, um Speicher zu sparen.

Wenn Sie ein komprimiertes Format (wie MP3 oder Vorbis) verwenden, wird Unity es dekomprimieren und dann während der Build-Zeit erneut komprimieren. Dies führt zu zwei verlustbehafteten Durchläufen, die die endgültige Qualität beeinträchtigen.
Reduzieren Sie die Größe Ihrer Clips und den Speicherverbrauch durch Kompression:
- Verwenden Sie Vorbis für die meisten Sounds (oder MP3 für Sounds, die nicht zum Schleifen gedacht sind).
- Verwenden Sie ADPCM für kurze, häufig verwendete Sounds (z. B. Schritte, Schüsse). Dies verkleinert die Dateien im Vergleich zu unkomprimiertem PCM, ist jedoch schnell während der Wiedergabe zu dekodieren.
Soundeffekte auf mobilen Geräten sollten höchstens 22.050 Hz betragen. Die Verwendung niedrigerer Einstellungen hat normalerweise minimale Auswirkungen auf die endgültige Qualität; verwenden Sie Ihre eigenen Ohren zur Beurteilung.
Die Einstellung variiert je nach Clip-Größe.
- Kleine Clips (< 200 kb) sollten beim Laden dekomprimiert werden. Dies verursacht CPU-Kosten und Speicher, indem ein Sound in rohe 16-Bit PCM-Audiodaten dekomprimiert wird, daher ist es nur für kurze Sounds wünschenswert.
- Mittlere Clips (>= 200 kb) sollten Komprimiert im Speicher bleiben.
- Große Dateien (Hintergrundmusik) sollten auf Streaming eingestellt werden, andernfalls wird das gesamte Asset auf einmal in den Speicher geladen.
Wenn Sie einen Stummschaltknopf implementieren, setzen Sie die Lautstärke nicht einfach auf 0. Sie können Zerstören die AudioSource Komponente, um sie aus dem Speicher zu entladen, vorausgesetzt, der Spieler muss dies nicht sehr oft ein- und ausschalten.
Im nächsten Blogbeitrag werden wir direkt in Grafiken und Assets eintauchen. Wenn Sie jedoch Zugriff auf die vollständige Liste von Tipps und Tricks des Teams von heute haben möchten, ist unser vollständiges E-Book hier verfügbar.

Wenn Sie mehr über die integrierten Supportdienste erfahren möchten und Ihrem Team direkten Zugang zu Ingenieuren, Expertenrat und bewährten Praktiken für Ihre Projekte geben möchten, dann schauen Sie sich die Erfolgpläne von Unity hier an.
Wir möchten Ihnen helfen, Ihre Unity-Anwendungen so leistungsfähig wie möglich zu machen. Wenn es also Optimierungsthemen gibt, über die Sie mehr erfahren möchten, lassen Sie es uns bitte in den Kommentaren wissen.
