Games

Optimieren Sie die Leistung Ihres mobilen Spiels: Holen Sie sich Expertentipps zu Physik, UI und Audioeinstellungen

THOMAS KROGH-JACOBSEN / UNITY TECHNOLOGIESProduct Marketing Core Tech
Jul 13, 2021|13 Min.
Optimieren Sie die Leistung Ihres mobilen Spiels: Holen Sie sich Expertentipps zu Physik, UI und Audioeinstellungen
Diese Website wurde aus praktischen Gründen für Sie maschinell übersetzt. Die Richtigkeit und Zuverlässigkeit des übersetzten Inhalts kann von uns nicht gewährleistet werden. Sollten Sie Zweifel an der Richtigkeit des übersetzten Inhalts haben, schauen Sie sich bitte die offizielle englische Version der Website an.

Unser Integrated Success-Team unterstützt Unity-Kunden bei ihren komplexen technischen Problemen. Wir haben uns mit diesem Team erfahrener Software-Ingenieure zusammengesetzt und sie gebeten, uns von ihrem Fachwissen über die Optimierung von Handyspielen zu berichten.

Unser Accelerate Solutions-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. Bei ihrer Arbeit tauchen sie tief in die Projekte der Entwickler ein, um herauszufinden, an welchen Stellen die Leistung optimiert werden kann, um Geschwindigkeit, Stabilität und Effizienz zu verbessern.

Als unsere Techniker begannen, ihre Erkenntnisse über die Optimierung von Handyspielen mit uns zu teilen, wurde uns schnell klar, dass es viel zu viele großartige Informationen für einen einzigen Blogbeitrag gab, den wir geplant hatten. Stattdessen haben wir beschlossen, ihren Wissensschatz 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 beleuchten.

In diesem zweiten Teil der Serie gehen wir näher darauf ein, wie man die Leistung mit der Benutzeroberfläche, der Physik und den Audioeinstellungen verbessern kann. Falls Sie es verpasst haben, lesen Sie unseren vorherigen Beitrag über Profilerstellung, Speicher und Code-Architektur - und bleiben Sie dran für unseren nächsten Beitrag, der sich mit Assets, Projektkonfiguration und Grafiken beschäftigt.

Sie wollen alles sofort? Laden Sie das kostenlose E-Book herunter.

Fangen wir gleich damit an!

Physik

Die in Unity eingebaute Physik (Nvidia PhysX) kann auf mobilen Geräten teuer sein, aber die folgenden Tipps können Ihnen helfen, mehr Bilder pro Sekunde zu erzielen.

Optimieren Sie Ihre Einstellungen

Aktivieren Sie in den PlayerSettings nach Möglichkeit Prebake Collision Meshes.

Bild des Einstellungsfeldes für den Spieler mit dunkelgrauem Hintergrund und dem Text "prebake collision meshes*" (Kollisionsnetze vorbacken), der rot abgegrenzt ist
Prebake Collision Meshes aktivieren.

Stellen Sie sicher, dass Sie Ihre Physikeinstellungen bearbeiten(Projekteinstellungen > Physik) und Ihre Ebenen-Kollisionsmatrix vereinfachen, wo immer dies möglich ist.

Deaktivieren Sie Auto-Sync-Transformationen und aktivieren Sie Kollisionsrückrufe wiederverwenden.

Bild der Projekteinstellungsbox mit grauem Hintergrund und den rot abgesetzten Abschnitten für "Auto Sync Transforms" und "Layer Collision Matrix".
Ändern Sie die Einstellungen des Physikprojekts, um die Leistung zu erhöhen.
Bild des Physikmoduls des Profilers mit dem 5ms-Abschnitt, der die Aktivität in Grün, Blau und Orange vor einem schwarzen Hintergrund zeigt.
Behalten Sie das Physikmodul des Profiler im Auge, um Leistungsprobleme zu vermeiden.
Vereinfachung von Kollidern

Mesh Collider können teuer sein. Ersetzen Sie komplexere Netzkollider durch primitive oder vereinfachte Netzkollider, um die ursprüngliche Form anzunähern.

Verwenden Sie Primitive oder vereinfachte Netze für Kollider.
Verwenden Sie Primitive oder vereinfachte Netze für Kollider.
Bewegen eines Rigidbodies mit physikalischen Methoden

Verwenden Sie Klassenmethoden wie MovePosition oder AddForce, um Ihre Rigidbody-Objekte zu bewegen. Die direkte Übersetzung ihrer Transform-Komponenten kann zu Neuberechnungen der physikalischen Welt führen, die in komplexen Szenen teuer sind. Verschieben von Physikkörpern in FixedUpdate statt in Update.

Feste Zeitspanne festlegen

Der Standardwert für den festen Zeitschritt in den Projekteinstellungen ist 0,02 (50 Hz). Ändern Sie diesen Wert entsprechend der gewünschten Bildrate (z. B. 0,03 für 30 FPS).

Wenn die Framerate zur Laufzeit sinkt, bedeutet dies jedoch, dass Unity FixedUpdate mehrmals pro Frame aufruft und möglicherweise ein CPU-Leistungsproblem mit physiklastigen Inhalten verursacht.

Die maximal zulässige Zeitspanne begrenzt, wie viel Zeit Physikberechnungen und FixedUpdate-Ereignisse in Anspruch nehmen können, wenn die Bildwiederholrate sinkt. Ein niedrigerer Wert bedeutet, dass die Physik und die Animationen während eines Leistungsproblems langsamer werden können, während gleichzeitig ihre Auswirkungen auf die Bildrate verringert werden.

Bild des Festzeitmoduls innerhalb der Projekteinstellungen mit grauem Hintergrund und weißem Text.
Passen Sie den festen Zeitschritt an Ihre Zielbildrate an, und verringern Sie den maximal zulässigen Zeitschritt, um Leistungsstörungen zu vermeiden.
Visualisierung mit dem Physik-Debugger

Verwenden Sie das Physik-Debug-Fenster(Fenster > Analyse > Physik-Debugger), um Probleme mit Kollidern oder Unstimmigkeiten zu beheben. Hier werden die GameObjects, die miteinander kollidieren können, farbcodiert angezeigt.

Bild eines orangefarbenen Bootes mit einem Netz-Overlay und einem blauen Schatten im Physik-Debugger-Dialogfeld.
Mit dem Physik-Debug-Werkzeug können Sie visualisieren, wie Ihre Physikobjekte miteinander interagieren können.

Weitere Informationen finden Sie unter Physik-Debug-Visualisierung in der Unity-Dokumentation.

Benutzeroberfläche

Unity UI (UGUI) kann oft eine Quelle für Leistungsprobleme sein. Die Canvas-Komponente erzeugt und aktualisiert Meshes für die UI-Elemente und sendet Zeichnungsaufrufe an die GPU. Seine Funktionsweise kann kostspielig sein, daher sollten Sie bei der Arbeit mit UGUI die folgenden Faktoren berücksichtigen.

Teilen Sie Ihre Leinwände auf

Wenn Sie eine große Leinwand mit Tausenden von Elementen haben, erzwingt die Aktualisierung eines einzelnen UI-Elements die Aktualisierung der gesamten Leinwand, was zu einer CPU-Spitze führen kann.

Nutzen Sie die Fähigkeit von UGUI, mehrere Canvases zu unterstützen. Unterteilen Sie die Elemente der Benutzeroberfläche danach, wie häufig sie aktualisiert werden müssen. Halten Sie statische UI-Elemente auf einem separaten Canvas und dynamische Elemente, die gleichzeitig aktualisiert werden, auf kleineren Unter-Canvases.

Stellen Sie sicher, dass alle UI-Elemente in jedem Canvas denselben Z-Wert, dieselben Materialien und Texturen haben.

Unsichtbare UI-Elemente ausblenden

Möglicherweise haben Sie UI-Elemente, die nur sporadisch im Spiel erscheinen (z. B. ein Gesundheitsbalken, der erscheint, wenn eine Figur Schaden nimmt). Wenn Ihr unsichtbares UI-Element aktiv ist, verwendet es möglicherweise noch Zeichenaufrufe. Deaktivieren Sie explizit alle unsichtbaren Komponenten der Benutzeroberfläche und aktivieren Sie sie bei Bedarf wieder.

Wenn Sie nur die Sichtbarkeit der Leinwand deaktivieren müssen, deaktivieren Sie die Komponente Leinwand und nicht das GameObjects. Dies kann den Neuaufbau von Meshes und Vertices ersparen.

GrafikRaycaster einschränken und Raycast-Ziel deaktivieren

Eingabeereignisse wie Berührungen oder Klicks auf dem Bildschirm erfordern die Komponente GraphicRaycaster . Diese Funktion durchläuft einfach jeden Eingabepunkt auf dem Bildschirm und prüft, ob er sich innerhalb der RectTransform der Benutzeroberfläche befindet.

Entfernen Sie den Standard-GraphicRaycaster aus dem obersten Canvas in der Hierarchie. Fügen Sie stattdessen den GraphicRaycaster ausschließlich zu den einzelnen Elementen hinzu, die interagieren müssen (Schaltflächen, Scrollrecks usw.).

Bild des grauen grafischen Raycaster-Dialogfelds mit weißem Text.
Deaktivieren Sie die Option Umgekehrte Grafiken ignorieren, die standardmäßig aktiviert ist.

Deaktivieren Sie außerdem Raycast Target für alle Texte und Bilder der Benutzeroberfläche, die es nicht benötigen. Wenn die Benutzeroberfläche komplex ist und viele Elemente enthält, können all diese kleinen Änderungen unnötige Berechnungen vermeiden.

Bilddialogfeld mit grauem Hintergrund und dem Text "Raycast Target" in einem roten Quadrat.
Deaktivieren Sie Raycast Target, wenn möglich.
Vermeiden Sie Layout-Gruppen

Layout-Gruppen lassen sich nicht effizient aktualisieren, daher sollten Sie sie sparsam einsetzen. Vermeiden Sie sie ganz, wenn Ihr Inhalt nicht dynamisch ist, und verwenden Sie stattdessen Anker für proportionale Layouts. Andernfalls erstellen Sie benutzerdefinierten Code, um die Layoutgruppenkomponenten zu deaktivieren, nachdem sie die Benutzeroberfläche eingerichtet haben.

Wenn Sie Layout-Gruppen (horizontal, vertikal, Raster) für Ihre dynamischen Elemente verwenden müssen, vermeiden Sie deren Verschachtelung, um die Leistung zu verbessern.

Dialogfeld der Rasterlayoutgruppe mit grauem Hintergrund und weißem Text.
Layout-Gruppen können die Leistung verringern, insbesondere wenn sie verschachtelt sind.
Große Listen- und Rasteransichten vermeiden

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 Artikeln), sollten Sie die Wiederverwendung eines kleineren Pools von UI-Elementen in Betracht ziehen, anstatt für jeden Artikel ein UI-Element zu erstellen. In diesem GitHub-Beispielprojekt sehen Sie, wie das funktioniert.

Vermeiden Sie zahlreiche überlagerte Elemente

Das Übereinanderlegen vieler UI-Elemente (z. B. gestapelte Karten in einem Kartenkampfspiel) führt zu Überzeichnungen. Passen Sie Ihren Code an, um geschichtete Elemente zur Laufzeit in weniger Elemente und Stapel zusammenzufassen.

Mehrere Auflösungen und Seitenverhältnisse verwenden

Da mobile Geräte heute sehr unterschiedliche Auflösungen und Bildschirmgrößen verwenden, sollten Sie alternative Versionen der Benutzeroberfläche erstellen, um auf jedem Gerät die beste Erfahrung zu bieten.

Verwenden Sie den Device Simulator, um eine Vorschau der Benutzeroberfläche für eine Vielzahl von unterstützten Geräten zu erhalten. Sie können auch virtuelle Geräte in XCode und Android Studio erstellen.

Bild des Gerätesimulators mit einem grauen Dialogfeldhintergrund und einer Simulation eines Rennbootspiels auf einem Smartphone.
Mit dem Device Simulator können Sie eine Vorschau auf eine Vielzahl von Bildschirmformaten anzeigen.
Bei Verwendung einer Vollbild-Benutzeroberfläche alles andere ausblenden

Wenn Ihr Pausen- oder Startbildschirm alles andere in der Szene verdeckt, deaktivieren Sie die Kamera, die die 3D-Szene rendert. Deaktivieren Sie auch alle Canvas-Hintergrundelemente, die sich hinter dem oberen Canvas befinden.

Ziehen Sie in Erwägung, die Application.targetFrameRate während einer Vollbild-Benutzeroberfläche zu senken, da Sie nicht mit 60 FPS aktualisieren müssen.

Zuweisen der Kamera zu Weltraum- und Kameraraum-Leinwänden

Wenn Sie das Feld " Event" oder " Render Camera" leer lassen, muss Unity die Datei Camera.main ausfüllen, was unnötig teuer ist.

Verwenden Sie nach Möglichkeit Screen Space - Overlay für Ihren Canvas RenderMode, da hierfür keine Kamera erforderlich ist.

Bild des Dialogfelds Kameraraum-Leinwände mit ausgegrautem Hintergrund und weißem Text.
Wenn Sie den Weltraum-Rendermodus verwenden, stellen Sie sicher, dass Sie die Ereigniskamera ausfüllen.
Audio

Obwohl Audio normalerweise keinen Leistungsengpass darstellt, können Sie dennoch Optimierungen vornehmen, um Speicherplatz zu sparen.

Inspektor-Dialogfeld mit grauem Hintergrund und weißem Text mit einem orangefarbenen Sprachmodulator am unteren Rand.
Optimieren Sie die Importeinstellungen für Ihre AudioClips.
Verwenden Sie nach Möglichkeit unkomprimierte WAV-Originaldateien als Ausgangsmaterial.

Wenn Sie ein komprimiertes Format (z. B. MP3 oder Vorbis) verwenden, dekomprimiert Unity es und komprimiert es dann während der Erstellung neu. Dies führt zu zwei verlustbehafteten Durchgängen, die die endgültige Qualität verschlechtern.

Komprimieren des Clips und Reduzieren der Komprimierungsbitrate

Reduzieren Sie die Größe Ihrer Clips und den Speicherbedarf durch Komprimierung:

  • Verwenden Sie Vorbis für die meisten Klänge (oder MP3 für Klänge, die nicht in einer Schleife laufen sollen).
  • Verwenden Sie ADPCM für kurze, häufig verwendete Töne (z. B. Schritte, Schüsse). Dadurch werden die Dateien im Vergleich zu unkomprimiertem PCM verkleinert, können aber bei der Wiedergabe schnell dekodiert werden.

Toneffekte auf mobilen Geräten sollten höchstens 22.050 Hz haben. Die Verwendung niedrigerer Einstellungen hat in der Regel nur minimale Auswirkungen auf die endgültige Qualität; beurteilen Sie dies mit Ihren eigenen Ohren.

Wählen Sie den richtigen Lasttyp

Die Einstellung ist je nach Clipgröße unterschiedlich.

  • Kleine Clips (< 200 kb) sollten Beim Laden dekomprimieren. Dies verursacht CPU-Kosten und Speicherplatz durch die Dekomprimierung eines Tons in rohe 16-Bit-PCM-Audiodaten, so dass es nur für kurze Töne wünschenswert ist.
  • Mittlere Clips (>= 200 kb) sollten im Speicher komprimiert bleiben.
  • Große Dateien (Hintergrundmusik) sollten auf Streaming eingestellt werden, da sonst das gesamte Asset auf einmal in den Speicher geladen wird.
Stummgeschaltete AudioSources aus dem Speicher entladen

Wenn Sie eine Stummschalttaste einrichten, stellen Sie die Lautstärke nicht einfach auf 0. Sie können die AudioSource-Komponente zerstören, um sie aus dem Speicher zu entladen, vorausgesetzt, der Player muss sie nicht sehr oft ein- und ausschalten.

Laden Sie die vollständigen Tipps zur mobilen Leistung herunter

Im nächsten Blogbeitrag werden wir uns mit Grafiken und Assets beschäftigen. Wenn Sie jedoch Zugriff auf die vollständige Liste der Tipps und Tricks des Teams von heute haben möchten, finden Sie hier unser E-Book in voller Länge.

Bild des Ebook-Covers mit rotem Hintergrund und einer Grafik eines Abenteuerspiels mit einem Drachen und den Worten "Optimize your mobile game performance" in fetter weißer Schrift.

E-BOOK HERUNTERLADEN

Wenn Sie mehr über integrierte Support-Services erfahren möchten und Ihrem Team direkten Zugang zu Ingenieuren, Expertenrat und Best-Practice-Anleitungen für Ihre Projekte geben wollen, dann sehen Sie sich hier die Erfolgspläne von Unity an.

Bleiben Sie dran für weitere Leistungstipps

Wir möchten Ihnen helfen, Ihre Unity-Anwendungen so performant wie möglich zu gestalten. Wenn Sie also mehr über Optimierungsmöglichkeiten wissen möchten, schreiben Sie uns bitte in die Kommentare.