Im Editor läuft Ihr Spiel butterweich. Dann installieren Sie den Build auf dem eigenen Smartphone, und plötzlich wirkt alles zäh. Die Kamera zieht nach, Menüs reagieren träge, und nach zehn Minuten Spielzeit liegt das Gerät warm in der Hand. Fast jedes Unity-Team erlebt diesen Moment irgendwann, meistens kurz vor einem Release.
Die gute Nachricht: Für die meisten Projekte ist das kein Grund, Systeme neu zu schreiben. Oft fehlen nur ein paar bewusste Entscheidungen bei Bildrate, Auflösung, Render-Pipeline und Texturen. Dieser Beitrag beantwortet die Frage, wie Sie Ihr Unity-Spiel für Android und iOS optimieren, in einer festen Reihenfolge. Erst messen Sie auf dem Gerät, dann drehen Sie an den Einstellungen in Unity 6 und URP, die laut Unity-Dokumentation den größten Einfluss haben. Am Ende steht eine Checkliste, die Sie direkt abarbeiten können.
Erst messen, und zwar auf dem Gerät
Der Editor läuft auf Ihrem Entwicklungsrechner. Er sagt deshalb wenig darüber aus, wie sich ein Mittelklasse-Smartphone verhält. Mobilgeräte haben andere GPUs, weniger Speicherbandbreite und drosseln ihre Leistung, wenn sie warm werden. Bevor Sie also irgendeine Einstellung ändern, sollten Sie wissen, wo die Zeit tatsächlich verloren geht.
So verbinden Sie den Unity Profiler mit Ihrem Gerät:
- Öffnen Sie File > Build Profiles und wählen Sie Android oder iOS.
- Aktivieren Sie Development Build und Autoconnect Profiler.
- Starten Sie den Build mit Build & Run.
- Öffnen Sie in Unity Window > Analysis > Profiler. Das Gerät erscheint in der Zielauswahl oben im Fenster.
Bei Android per USB-Kabel taucht das Gerät dort als Eintrag wie AndroidProfiler([email protected]:34999) auf. Wenn die Verbindung über das Netzwerk nicht klappt, lohnt ein Blick auf die Firewall. Unity nennt dafür die Ports 54998 bis 55511. Für Fragen rund um die GPU empfiehlt die URP-Dokumentation zusätzlich einen GPU-Profiler wie RenderDoc oder Xcode.
Ein Hinweis aus unserer Praxis: Notieren Sie sich vor jeder Änderung eine Ausgangsmessung in einer festen Testszene. Nur so sehen Sie später, welche Einstellung wirklich etwas gebracht hat und welche Sie sich hätten sparen können.
Die Bildrate bewusst festlegen
Warum Ihr Spiel auf dem Handy mit 30 FPS läuft
Viele Teams wundern sich, warum ihr Spiel auf dem Smartphone nie über 30 FPS kommt, obwohl der Profiler noch Luft zeigt. Die Antwort steht in der Unity-Dokumentation zu Application.targetFrameRate. Auf Android und iOS rendert Unity mit den Standardwerten, also QualitySettings.vSyncCount = 0 und Application.targetFrameRate = -1, mit festen 30 Bildern pro Sekunde. Das spart Akku und gilt unabhängig von der Bildwiederholrate des Displays. Einstellungen für vSyncCount größer als null ignoriert Unity auf diesen Plattformen.
Zwei weitere Details aus der Dokumentation sind wichtig. Unity rendert nie schneller, als das Display es zulässt. Und Werte, die die aktuelle Bildwiederholrate nicht glatt teilen, rundet Unity auf den nächsten passenden Wert ab. Das Beispiel aus der Doku: Auf einem 60-Hz-Display ergibt eine Zielrate von 25 tatsächlich 20 FPS.
Code-Beispiel: Bildrate beim Start setzen
Ein kleines Skript in Ihrer ersten Szene genügt:
using UnityEngine;
public class MobileFrameRate : MonoBehaviour
{
[SerializeField] private bool useNativeRefreshRate = false;
[SerializeField] private int targetFrameRate = 60;
private void Awake()
{
// targetFrameRate greift nur, wenn vSyncCount 0 ist
QualitySettings.vSyncCount = 0;
Application.targetFrameRate = useNativeRefreshRate
? (int)Screen.currentResolution.refreshRateRatio.value
: targetFrameRate;
}
}
Die Variante mit refreshRateRatio entspricht dem Weg, den Unity für die native Bildwiederholrate des Displays beschreibt. Auf iOS kommt noch ProMotion ins Spiel. Ist ProMotion im Projekt deaktiviert, was bei neuen Projekten der Standard ist, liegt die native Rate bei 60 Hz. Ist es aktiviert, sind auf unterstützten Displays 120 Hz möglich.
Mehr ist hier nicht automatisch besser. Unity weist selbst darauf hin, dass eine niedrigere Bildrate Akku spart und Überhitzung vermeidet. Aus unserer Praxis: Ein Action-Spiel profitiert spürbar von 60 FPS, ein ruhiges Puzzle- oder Kartenspiel darf bewusst bei 30 bleiben. Entscheiden Sie das pro Spiel und nicht pro Gewohnheit.
Optimized Frame Pacing auf Android
In den Android Player Settings finden Sie unter Resolution and Presentation die Option Optimized Frame Pacing. Laut Dokumentation verteilt Unity damit die Frames gleichmäßiger, sodass die Bildrate weniger schwankt und sich das Spiel flüssiger anfühlt.
Weniger Pixel rendern
Moderne Smartphones haben sehr hohe Auflösungen. Jedes Pixel muss aber berechnet werden. Die Android-Dokumentation von Unity sagt ausdrücklich, dass eine Auflösung unterhalb der nativen Displayauflösung Leistung und Akkulaufzeit verbessern kann. Dafür gibt es zwei Wege.
Render Scale im URP Asset
Im URP Asset finden Sie unter Quality den Regler Render Scale. Er skaliert die Auflösung, mit der das Spielbild gerendert wird. Die UI bleibt laut Dokumentation in nativer Auflösung und damit scharf. Mit dem Upscaling Filter legen Sie fest, wie das kleinere Bild auf die Displaygröße gebracht wird. Zur Auswahl steht unter anderem AMD FidelityFX Super Resolution 1.0.
Code-Beispiel: Render Scale zur Laufzeit anpassen
Nicht jedes Gerät braucht denselben Wert. Unity zeigt in der Dokumentation, wie Sie das aktive URP Asset zur Laufzeit finden und Eigenschaften wie renderScale und shadowDistance abhängig vom Grafikspeicher setzen. Eine gekürzte Fassung:
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class MobileRenderScale : MonoBehaviour
{
private void Start()
{
var urp = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
if (urp == null) return;
int vram = SystemInfo.graphicsMemorySize;
if (vram <= 1024)
{
urp.renderScale = 0.7f;
urp.shadowDistance = 50f;
}
else if (vram <= 3072)
{
urp.renderScale = 0.9f;
urp.shadowDistance = 150f;
}
}
}
Die Zahlen stammen aus dem Unity-Beispiel und sind ein Startpunkt, keine Empfehlung. Die passenden Werte für Ihr Spiel liefert nur die Messung auf echten Geräten. Ein Hinweis aus unserer Praxis: Im Editor ändern Sie mit so einem Skript das URP Asset selbst. Prüfen Sie nach einem Testlauf im Play Mode, ob Ihr Asset noch die gewünschten Ausgangswerte hat.
Fixed DPI auf Android
Alternativ können Sie in den Android Player Settings unter Resolution Scaling den Resolution Scaling Mode auf Fixed DPI stellen und eine Target DPI angeben. Hat das Display eine höhere Pixeldichte, skaliert Unity die Auflösung herunter. Die Formel aus der Dokumentation lautet min(Target DPI × Factor / Screen DPI, 1). Der Factor kommt aus den Quality Settings, dort heißt er Resolution Scaling Fixed DPI Factor.
Das URP Asset für Mobile einstellen
Für Mobilgeräte lohnt sich ein eigenes URP Asset, das Sie der Mobile-Qualitätsstufe zuweisen. Wie Sie Qualitätsstufen für unterschiedliche Hardware sauber organisieren, zeigen wir in unserem Beitrag zur Cross-Platform-Entwicklung mit einer Codebasis und vier Hardware-Profilen. Hier geht es um die einzelnen Schalter.
Die Unity-Seite „Configure for better performance in URP“ nennt die Einstellungen mit dem größten Einfluss. Für Mobile sind diese besonders relevant:
- HDR deaktivieren oder, falls Sie HDR brauchen, die 32-Bit-Präzision nutzen. Das spart Speicher.
- Depth Texture und Opaque Texture nur aktivieren, wenn ein Shader oder Effekt sie wirklich braucht.
- Store Actions auf Auto oder Discard stellen. Laut Unity kopiert URP dann auf schwächeren Mobilgeräten nicht unnötig Render Targets zwischen den Passes in den Speicher und wieder heraus.
- Anti-aliasing (MSAA) reduzieren oder abschalten, um Speicherbandbreite zu sparen.
- SRP Batcher aktivieren, nachdem Sie geprüft haben, dass Ihre Shader kompatibel sind.
- Additional Lights auf Per Vertex oder Disabled stellen, wenn Sie den Forward-Pfad nutzen. Schatten für zusätzliche Lichter abschalten.
- Schatten verkleinern: geringere Auflösung der Shadow Map, kürzere Max Distance, weniger Cascades und Soft Shadows aus.
- LOD Cross Fade abschalten auf schwächeren Mobilgeräten.
- Depth Priming Mode auf Disabled für mobile Plattformen.
- Native RenderPass aktivieren, wenn Sie Vulkan oder Metal nutzen.
- Wenige Kameras verwenden, denn jede Kamera kostet Culling und Rendering.
Bei den Shadern empfiehlt Unity für schwächere Mobilgeräte Baked Lit für statische und Simple Lit für dynamische Objekte. Den aufwendigen Complex Lit Shader sollten Sie meiden.
Ändern Sie diese Punkte nicht alle auf einmal. Unity rät selbst dazu, die Wirkung jeder Einstellung mit dem Profiler oder einem GPU-Profiler zu messen. Manche Funktionen braucht Ihr Projekt vielleicht doch.
Post-Processing mit Augenmaß
Post-Processing kann laut Unity viel Frame-Zeit kosten. Die URP-Dokumentation nennt diese Effekte als standardmäßig „mobilfreundlich“:
- Bloom mit deaktiviertem High Quality Filtering
- Chromatic Aberration
- Color Grading
- Lens Distortion
- Vignette
Für Tiefenunschärfe empfiehlt Unity auf schwächeren Geräten den Gaussian-Modus.
Bloom ist auf Mobile beliebt, deshalb lohnt der Blick in die Einstellungen. Laut Bloom-Referenz sind folgende Hebel wichtig: High Quality Filtering aus, beim Filter die schnelleren Varianten Dual oder Kawase wählen, Downscale auf Quarter stellen und Max Iterations senken.
Screen Space Ambient Occlusion (SSAO) ist in URP kein Volume-Effekt, sondern ein Renderer Feature, und taucht in der Liste oben nicht auf. Wenn Sie SSAO auf Mobile einsetzen wollen, prüfen Sie die Einstellungen auf der Unity-Seite zur Ambient Occlusion genau und messen Sie den Unterschied auf dem Gerät.
Overdraw sichtbar machen
Overdraw bedeutet, dass dieselben Pixel in einem Frame mehrfach gezeichnet werden. Auf Mobilgeräten ist das teuer, weil Speicherbandbreite knapp ist. Unity bringt dafür den Rendering Debugger mit. Sie öffnen ihn über Window > Analysis > Rendering Debugger und aktivieren dort die Overdraw-Ansicht. Sie zeigt, an welchen Stellen Unity Pixel übereinander zeichnet.
Der Rendering Debugger funktioniert auch auf dem Gerät. In einem Development Build öffnen Sie ihn auf dem Touchscreen mit einem Doppeltipp mit drei Fingern. Damit alle Bereiche im Build verfügbar sind, muss laut Dokumentation in den URP Global Settings die Option Strip Debug Variants deaktiviert sein.
Aus unserer Praxis sind die üblichen Verursacher große, halbtransparente Partikel, Nebel- und Rauch-Sprites, die den halben Bildschirm füllen, und UI-Panels, die vollflächig übereinanderliegen, obwohl nur das oberste sichtbar ist.
Texturen und Downloadgröße
ASTC als Standardformat
Unkomprimierte oder falsch komprimierte Texturen kosten Speicher und Bandbreite. Die Unity-Dokumentation empfiehlt ASTC für iOS ab Geräten mit A8-Chip und für moderne Android-GPUs. Wichtig ist der Rückfall: Unterstützt ein Gerät ASTC nicht, entpackt Unity die Textur in unkomprimiertes RGBA 32 Bit. Das kostet zusätzlichen Speicher und Ladezeit.
In den Android Player Settings können Sie unter Texture compression formats mehrere Formate eintragen. Mit einem App Bundle für Google Play nutzt Unity dann Texture Compression Targeting, und jedes Gerät erhält das passende Format. Bauen Sie eine APK, verwendet Unity laut Dokumentation nur das erste Format der Liste.
Was an der 200-MB-Grenze wirklich dran ist
In Foren liest man oft, ein Android-Spiel müsse unter 200 MB bleiben. Das ist heute so nicht mehr richtig. Laut Google Play liegt die Grenze für das komprimierte Download-Volumen des Base Modules bei 500 MB. Die 200 MB spielen trotzdem eine Rolle: Ist der Download größer, sehen Nutzer im Mobilfunknetz einen Hinweis auf die Größe. Der Hinweis blockiert die Installation nicht, kann aber Nutzer abschrecken. Auch Unitys eigene Seite zu Play Asset Delivery nennt noch die 200 MB, maßgeblich sind hier aber die Angaben von Google.
Für größere Inhalte gibt es Play Asset Delivery. Google kennt drei Auslieferungsarten:
- install-time: Die Inhalte kommen mit der Installation.
- fast-follow: Die Inhalte laden direkt nach der Installation automatisch nach.
- on-demand: Die Inhalte laden erst, wenn das Spiel sie anfordert.
In Unity 6 verbinden Sie das am bequemsten mit dem Paket Addressables for Android, das Addressables-Gruppen in Asset Packs verpackt. Auf iOS liegt die Grenze laut Apple deutlich höher, und für zusätzliche Inhalte nach der Installation bietet Apple das Framework Background Assets an.
Den Build verkleinern
Einige Schalter in den Android Player Settings verkleinern den Build zusätzlich:
- Strip Engine Code (nur mit IL2CPP) entfernt Engine-Code für Funktionen, die Ihr Projekt nicht nutzt.
- Managed Stripping Level legt fest, wie stark ungenutzter C#-Code entfernt wird. Höhere Stufen können laut Unity auch Code entfernen, der doch gebraucht wird. Testen Sie also gründlich.
- Texture Mipmap Stripping entfernt beim Build Mipmap-Stufen, die keine Qualitätsstufe der Plattform nutzt.
- Optimize Mesh Data entfernt ungenutzte Vertex-Attribute. Unity warnt: Mit dieser Option sollten Sie Material- und Shader-Einstellungen nicht zur Laufzeit ändern.
Wärme und Akku im Blick behalten
Ein Spiel, das in den ersten Minuten flüssig läuft, kann später einbrechen, weil das Gerät seine Leistung bei Hitze drosselt. In den Android Player Settings gibt es dafür den Sustained Performance Mode. Laut Dokumentation sorgt er über längere Zeit für eine vorhersagbare, gleichmäßige Leistung ohne thermische Drosselung. Die Gesamtleistung kann dabei allerdings niedriger ausfallen.
Einen Schritt weiter geht Adaptive Performance. Das Paket liefert Informationen zum thermischen Zustand des Geräts, und Ihr Spiel kann darauf reagieren, etwa indem es Qualitätsstufen senkt. Der Funktionsumfang unterscheidet sich je nach Plattform. Laut Unity unterstützen der Android- und der Apple-Provider Temperaturwarnungen und Scaler. Die automatische Leistungssteuerung (Auto Performance Control) gibt es nur beim Android-Provider. Für den Einstieg reicht es, zu wissen, dass es diese Werkzeuge gibt. Die Grundlagen aus diesem Beitrag sollten zuerst sitzen.
Checkliste: Mobile-Optimierung in sechs Schritten
- Auf dem Gerät profilen. Development Build mit Autoconnect Profiler, feste Testszene, Ausgangsmessung notieren.
- Bildrate bewusst setzen.
Application.targetFrameRatepassend zum Spieltyp wählen und auf Android Optimized Frame Pacing aktivieren. - Weniger Pixel rendern. Render Scale im URP Asset oder Fixed DPI auf Android nutzen.
- Eigenes URP Asset für Mobile. HDR, MSAA, Schatten, Additional Lights und Store Actions nach der Unity-Liste einstellen.
- Post-Processing ausdünnen und Overdraw prüfen. Mobilfreundliche Effekte bevorzugen und den Rendering Debugger auf dem Gerät nutzen.
- Texturen und Download im Griff behalten. ASTC, Texture Compression Targeting, Play Asset Delivery und Stripping einsetzen.
Und nach jedem Schritt: erneut messen.
Fazit
Ein Unity-Spiel für Android und iOS zu optimieren ist selten eine Frage von Tricks. Es ist eine Frage der Reihenfolge. Wer zuerst auf dem echten Gerät misst, die Bildrate bewusst festlegt, weniger Pixel rendert und ein eigenes URP Asset für Mobile pflegt, hat die größten Hebel schon in der Hand. Schlankes Post-Processing, wenig Overdraw, ASTC-Texturen und Play Asset Delivery erledigen den Rest. Die 200 MB auf Google Play sind dabei kein hartes Limit mehr, sondern die Schwelle für einen Hinweis an Mobilfunknutzer.
Ein praktischer nächster Schritt: Bauen Sie heute einen Development Build, verbinden Sie den Profiler und prüfen Sie, mit welcher Bildrate Ihr Spiel wirklich läuft. Wenn der Profiler dabei Ruckler durch häufiges Spawnen zeigt, hilft Ihnen unser Tipp zu Object Pooling in Unity weiter. Und wenn Sie bei der Optimierung Ihres Mobile-Spiels Unterstützung brauchen, ist ProjectMakers mit unseren Leistungen zur Game-Entwicklung für Sie da.