Bei der Erweiterung von Smartphones auf verschiedene große Bildschirmformate sollten Sie berücksichtigen, wie Ihr Spiel die Fensterverwaltung handhaben kann. Unter ChromeOS und Google Play Spiele auf dem PC kann Ihr Spiel im Fenstermodus auf einer Hauptoberfläche ausgeführt werden. Auf neuen Android-Tablets und faltbaren Geräten mit Android 12L (API-Level 32) oder höher und einer Bildschirmbreite von > 600 dp können Sie Ihr Spiel nebeneinander im Split-Screen-Modus mit anderen Apps ausführen, die Größe anpassen und auf faltbaren Geräten sogar zwischen dem inneren und dem äußeren Display wechseln, was zu einer Änderung der Fenstergröße und der Ausrichtung auf einigen Geräten führt.
Größenanpassung durch Unity-Spiele
Grundlegende Konfiguration für große Bildschirme
Geben Sie an, ob die Größe Ihres Spiels angepasst werden kann:
<android:resizeableActivity="true" or "false" />
Wenn die Größenanpassung nicht unterstützt wird, achten Sie darauf, dass im Spielmanifest explizit die minimalen und maximalen unterstützten Seitenverhältnisse definiert sind:
<!-- Render full screen between 3:2 and 21:9 aspect ratio -->
<!-- Let the platform letterbox otherwise -->
<activity android:minAspectRatio="1.5">
<activity android:maxAspectRatio="2.33">
Google Play Spiele auf dem PC
Bei Google Play Spiele auf dem PC übernimmt die Plattform die Größenanpassung von Fenstern unter Berücksichtigung des angegebenen Seitenverhältnisses. Die Fenstergröße wird automatisch auf die optimalen Abmessungen festgelegt. Wenn Sie als primäre Ausrichtung Querformat verwenden, muss das Seitenverhältnis mindestens 16:9 und im Hochformat ein Seitenverhältnis von 9:16 unterstützt werden. Für eine optimale Leistung sollten Sie bei Spielen im Querformat die Seitenverhältnisse 21:9, 16:10 und 3:2 explizit unterstützen. Die Größe des Fensters muss hier nicht veränderbar sein, ist aber für andere Formfaktoren immer noch gut.
Weitere Informationen und Best Practices finden Sie unter Grafiken für Google Play Spiele auf dem PC konfigurieren.
Große Bildschirme mit ChromeOS und Android
Wenn Sie den sichtbaren Bereich für Ihr Spiel im Vollbildmodus auf ChromeOS- und Android-Geräten mit großem Bildschirm maximieren möchten, sollten Sie den immersiven Vollbildmodus unterstützen und die Systemleisten ausblenden, indem Sie Flags auf decorView
, die Sichtbarkeit der System-UI oder die WindowInsetsCompat
API festlegen. Außerdem ist es wichtig, dass Rotations- und Größenanpassungsereignisse korrekt verarbeitet werden und dass sie auf ChromeOS-Geräten nicht auftreten.
Auf Android-Geräten mit großen Bildschirmen kann Ihr Spiel in Konfigurationen laufen, die Sie möglicherweise noch nicht kennen. Wenn Ihr Spiel nicht alle Konfigurationen für Fenstergröße und -ausrichtung unterstützt, wird Ihr Spiel über die Plattform-Letterbox im Kompatibilitätsmodus angezeigt und der Spieler gegebenenfalls aufgefordert, zu einer nicht unterstützten Konfiguration zu wechseln.
<ph type="x-smartling-placeholder">![](https://developer.android.google.cn/static/images/games/multiplatform/configuration_compatibility_dialog.png?authuser=6&hl=de)
Wenn ein Spieler zu einer nicht unterstützten Konfiguration wechselt, wird er auf einigen Geräten möglicherweise aufgefordert, das Spiel neu zu laden und die Aktivität so zu reproduzieren, dass sie am besten in das neue Fensterlayout passt. Dadurch wird das Spiel gestört. Testen Sie Ihr Spiel in verschiedenen Konfigurationen für den Mehrfenstermodus (2/3, 1/2, 1/3 Fenstergröße) und achten Sie darauf, dass das Spiel nicht abgeschnitten wird oder Elemente der Benutzeroberfläche unzugänglich sind. Außerdem kannst du testen, wie dein Spiel auf faltbare Kontinuität reagiert, wenn bei faltbaren Geräten zwischen dem inneren und dem äußeren Display gewechselt wird. Wenn Probleme auftreten, bearbeiten Sie diese Konfigurationsereignisse explizit und fügen Sie erweiterte Unterstützung für die Größenanpassung großer Bildschirme hinzu.
Erweiterte Größenanpassung für große Bildschirme
<ph type="x-smartling-placeholder">So beenden Sie den Kompatibilitätsmodus und vermeiden die Wiederherstellung von Aktivitäten:
Geben Sie für Ihre Hauptaktivität an, dass die Größe angepasst werden kann:
<android:resizeableActivity="true" />
Deklarieren Sie explizite Unterstützung für „orientation“, „screenSize“, „smallestScreenSize“, „screenLayout“ und „density“. im Attribut
android:configChanges
des Elements<activity>
deines Spielmanifests, um alle Konfigurationsereignisse für den großen Bildschirm zu empfangen:<android:configChanges="screenSize | smallestScreenSize | screenLayout | orientation | keyboard | keyboardHidden | density" />
Überschreiben Sie
onConfigurationChanged()
und verarbeiten Sie das Konfigurationsereignis, einschließlich der aktuellen Ausrichtung, Fenstergröße, Breite und Höhe:Kotlin
override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) val density: Float = resources.displayMetrics.density val newScreenWidthPixels = (newConfig.screenWidthDp * density).toInt() val newScreenHeightPixels = (newConfig.screenHeightDp * density).toInt() // Configuration.ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE val newScreenOrientation: Int = newConfig.orientation // ROTATION_0, ROTATION_90, ROTATION_180, or ROTATION_270 val newScreenRotation: Int = windowManager.defaultDisplay.rotation }
Java
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); float density = getResources().getDisplayMetrics().density; int newScreenWidthPixels = (int) (newConfig.screenWidthDp * density); int newScreenHeightPixels = (int) (newConfig.screenHeightDp * density); // Configuration.ORIENTATION_PORTRAIT or ORIENTATION_LANDSCAPE int newScreenOrientation = newConfig.orientation; // ROTATION_0, ROTATION_90, ROTATION_180, or ROTATION_270 int newScreenRotation = getWindowManager().getDefaultDisplay() .getRotation(); }
Du kannst auch das WindowManager
abfragen, um die aktuelle Gerätedrehung zu prüfen. Überprüfen Sie mithilfe dieser Metadaten die neuen Fensterabmessungen und rendern Sie sie in der vollen Fenstergröße. Aufgrund von unterschiedlichen Seitenverhältnissen funktioniert dies möglicherweise nicht in allen Fällen. Verankern Sie daher alternativ Ihre Spiel-UI in der neuen Fenstergröße und im Letterbox-Format, die Ihre wichtigsten Spielinhalte enthalten. Wenn es technische oder gestalterische Einschränkungen gibt, die eines der beiden Ansätze verhindern, führen Sie ein eigenes Letterbox-Bild innerhalb der Suchmaschine durch, um das Seitenverhältnis beizubehalten, und skalieren Sie auf die bestmögliche Größe, geben Sie dabei resizeableActivity = false
an und vermeiden Sie den Konfigurationsmodus.
Unabhängig von deinem Ansatz solltest du dein Spiel in verschiedenen Konfigurationen testen (Falten und Aufklappen, verschiedene Änderungen an der Drehung, Splitscreen-Modus). Achte dabei darauf, dass es keine Abstriche oder Überlappungen von UI-Elementen im Spiel, Probleme mit Touch-Ziel-Bedienungshilfen oder Probleme mit dem Seitenverhältnis gibt, die dazu führen, dass das Spiel gedehnt, zusammengedrückt oder anderweitig verzerrt wird.
Außerdem bedeuten größere Bildschirme in der Regel mehr Pixel, weil die Anzahl der Pixel bei einem viel größeren Bereich gleich groß ist. Dies kann bei verkleinerten Renderingpuffern oder Assets mit geringerer Auflösung zu Verpixeln führen. Verwenden Sie hochwertige Assets auf Geräten mit großen Bildschirmen und Leistungsprofil für Ihr Spiel, um Probleme zu vermeiden. Wenn Ihr Spiel mehrere Qualitätsstufen unterstützt, achten Sie darauf, dass es Geräte mit großen Bildschirmen unterstützt.
Mehrfenstermodus
Mit dem Mehrfenstermodus können mehrere Apps gleichzeitig denselben Bildschirm verwenden. Der Mehrfenstermodus ändert nicht den Aktivitätslebenszyklus. Der fortgesetzte Zustand von Apps in mehreren Fenstern unterscheidet sich jedoch je nach Android-Version. Weitere Informationen finden Sie unter Aktivitätslebenszyklus im Mehrfenstermodus in Unterstützung für den Mehrfenstermodus.
Wenn der Spieler eine App oder ein Spiel in den Mehrfenstermodus versetzt, benachrichtigt das System die Aktivität über eine Konfigurationsänderung, wie im Abschnitt Erweiterte Größenanpassung für den großen Bildschirm angegeben. Eine Konfigurationsänderung findet auch statt, wenn der Spieler die Größe des Spiels ändert oder das Spiel wieder im Vollbildmodus abspielt.
Es gibt keine Garantie, dass die App wieder den Fokus erhält, wenn sie in den Mehrfenstermodus versetzt wird. Wenn Sie also eines der App-Statusereignisse verwenden, um Ihr Spiel zu pausieren, sollten Sie sich nicht auf das erhaltene Fokusereignis (onWindowFocusChanged()
mit dem Fokuswert auf „wahr“) verlassen, um das Spiel fortzusetzen. Verwenden Sie stattdessen andere Event-Handler oder Handler für Statusänderungen wie onConfigurationChanged()
oder onResume()
. Sie können jederzeit mit der Methode isInMultiWindowMode()
feststellen, ob die aktuelle Aktivität im Mehrfenstermodus ausgeführt wird.
Im Mehrfenstermodus unter ChromeOS spielen die Abmessungen des anfänglichen Fensters eine wichtige Rolle. Ein Spiel muss nicht im Vollbildmodus sein. Geben Sie in diesem Fall an, wie groß das Fenster sein soll. Dafür gibt es zwei empfohlene Vorgehensweisen.
Bei der ersten Option werden spezifische Attribute im <layout>
-Tag in Ihrem Android-Manifest verwendet. Mit den Attributen defaultHeight
und defaultWidth
werden die anfänglichen Dimensionen gesteuert. Achten Sie auch auf die Attribute minHeight
und minWidth
, um zu verhindern, dass Ihre Spieler die Größe des Spielfensters an Abmessungen anpassen, die Sie nicht unterstützen. Zu guter Letzt gibt es noch das Attribut gravity
, das bestimmt, an welcher Stelle auf dem Bildschirm das Fenster angezeigt wird, wenn es geöffnet wird. Hier ist ein Beispiel für ein Layout-Tag mit diesen Attributen:
<layout android:defaultHeight="500dp"
android:defaultWidth="600dp"
android:gravity="top|end"
android:minHeight="450dp"
android:minWidth="300dp" />
Bei der zweiten Option zum Festlegen der Fenstergröße werden dynamische Startgrenzen verwendet. Mit setLaunchBounds(Rect)
können Sie die Abmessungen des Startfensters definieren. Wenn ein leeres Rechteck angegeben wird, wird die Aktivität in maximiertem Zustand gestartet.
Wenn Sie die Spiel-Engines Unity oder Unreal nutzen, achten Sie darauf, dass Sie eine aktuelle Version verwenden (Unity 2019.4.40 und Unreal 5.3 oder höher), die den Mehrfenstermodus gut unterstützt.
Faltbare Körperhaltung
Verwenden Sie die WindowManager-Layoutbibliothek von Jetpack, um faltbare Umgebungen wie „Auf dem Tisch“ zu unterstützen und die Immersion und die Interaktion der Spieler zu steigern:
<ph type="x-smartling-placeholder">![](https://developer.android.google.cn/static/images/games/multiplatform/foldable_posture_support.png?authuser=6&hl=de)
Kotlin
fun isTableTopPosture(foldFeature : FoldingFeature?) : Boolean { contract { returns(true) implies (foldFeature != null) } return foldFeature?.state == FoldingFeature.State.HALF_OPENED && foldFeature.orientation == FoldingFeature.Orientation.HORIZONTAL }
Java
boolean isTableTopPosture(FoldingFeature foldFeature) { return (foldFeature != null) && (foldFeature.getState() == FoldingFeature.State.HALF_OPENED) && (foldFeature.getOrientation() == FoldingFeature.Orientation.HORIZONTAL); }