Meine Methode ähnelt größtenteils den von anderen angegebenen Lösungen :) Ich werde versuchen, den Ansatz, mit dem ich das Spiel unabhängig von der Bildschirmgröße mache, detailliert zu erklären.
Bildschirmausrichtung
Abhängig von der Bildschirmausrichtung (Querformat oder Hochformat) müssen Sie überlegen, ob die Kamera mit einer festen Höhe oder einer festen Breite skaliert. Meistens wähle ich eine feste Breite für Spiele im Querformat und eine feste Höhe für Spiele im Hochformat.
Kameraskalierung
Wie bereits erwähnt, kann dies entweder eine feste Höhe oder eine feste Breite sein.
Feste Höhe : Der vertikale Bereich des Spiels passt immer zur Bildschirmhöhe. Und wenn sich das Seitenverhältnis des Bildschirms ändert, wird links und rechts auf dem Bildschirm zusätzlicher Platz hinzugefügt. Um dies zu implementieren, müssen Sie nichts codieren, es ist das Standardverhalten von Unity Camera.
Feste Breite : Der horizontale Bereich des Spiels passt immer zur Bildschirmbreite. Wenn sich das Seitenverhältnis des Bildschirms ändert, wird oben und unten zusätzlicher Platz hinzugefügt. Um dies zu implementieren, müssen Sie ein kleines Stück Code schreiben. Stellen Sie später sicher, dass Sie die Aktualisierungsfunktion für das Code-Formular entfernen und aktivieren.
using UnityEngine;
[ExecuteInEditMode]
public class ScaleWidthCamera : MonoBehaviour {
public int targetWidth = 640;
public float pixelsToUnits = 100;
void Update() {
int height = Mathf.RoundToInt(targetWidth / (float)Screen.width * Screen.height);
camera.orthographicSize = height / pixelsToUnits / 2;
}
}
Im Editor können Sie die targetWidth ändern, um den anzuzeigenden Weltraumbereich zu definieren. Dieser Code wird im folgenden Video zusammen mit vielen anderen Methoden für 2D-Spiele erklärt :)
Unite 2014 - 2D-Best Practices in Unity
Seitenverhältnis
Das folgende Seitenverhältnis wird von der breitesten bis zur engsten Seite angezeigt und deckt nahezu alle Bildschirmgrößen für Android und iOS ab
- 5: 4
- 4: 3
- 3: 2
- 16:10
- 16: 9
Normalerweise stelle ich alle diese Seitenverhältnisse in der angegebenen Reihenfolge unter dem Spielfenster ein, da dies beim Testen auf verschiedene Bildschirmgrößen praktisch ist :)
Verbrauchsfläche
Dies ist der Bereich, der je nach gewählter Kameraskalierung seitlich oder oben / unten zum Bildschirm hinzugefügt wird.
Für eine feste Höhe sollten alle Spielelemente vorzugsweise im Verhältnis 16: 9 passen, das am engsten ist. Und der Hintergrund sollte sich erstrecken, bis er das Verhältnis 5: 4 abdeckt. Das stellt sicher, dass Ihr Spiel niemals schwarze Streifen an den Seiten hat.
Bei fester Breite ist es fast dasselbe, aber hier sollten die Elemente im Verhältnis 5: 4 passen und der HG sollte bis 16: 9 reichen.
Grenzen
Manchmal können wir den Ansatz für den Verbrauchsbereich nicht verwenden, da wir den gesamten verfügbaren Bildschirm für das Spiel nutzen müssen.
Stellen Sie sich beispielsweise ein Porträtspiel mit fester Höhe vor, bei dem die vom Himmel fallenden Münzen aufgefangen werden. In diesem Fall müssen wir dem Player die Möglichkeit geben, sich horizontal über die verfügbare Bildschirmbreite zu bewegen.
Daher müssen wir die Grenzen der Kamera in Bezug auf die Weltkoordinaten kennen, um genau zu wissen, wo sich die linken, rechten, oberen oder unteren Bereiche der Kameraclips an der Weltposition befinden.
Wir können diese Schranken auch verwenden, um Spielelemente oder die Benutzeroberfläche an einer gewünschten Seite der Kamera zu verankern.
Mit Camera.ViewportToWorldPoint können wir die Grenzen ermitteln. Der Viewport-Bereich ist normalisiert und relativ zur Kamera. Unten links in der Kamera befindet sich (0,0). oben rechts ist (1,1). Die z-Position wird in Welteinheiten von der Kamera angegeben. Bei 2D / Orthographie spielt das z keine Rolle.
Vector3 leftBottom = camera.ViewportToWorldPoint(new Vector3(0, 0, camera.nearClipPlane));
Vector3 rightTop = camera.ViewportToWorldPoint(new Vector3(1, 1, camera.nearClipPlane));
float left = leftBottom.x;
float bottom = leftBottom.y;
float right = rightTop.x;
float top = rightTop.y;
Benutzeroberfläche
Für die Benutzeroberfläche können wir dieselben Konzepte anwenden, die wir für die Spielelemente verwendet haben. Nach der Einführung von Unity5 UI und der Verfügbarkeit von Plugins wie NGUI wird dies kein großes Problem sein :)