it-swarm.com.de

Wie kann ich mein Spiel so programmieren, dass es mit jeder Auflösung von Android-Geräten funktioniert? (mit Einheit)

Ich habe ein Spiel, was ich in 480x320 Auflösung gemacht habe (ich habe es in den Build-Einstellungen eingestellt) in Unity. Aber ich möchte mein Spiel mit jeder Auflösung für jedes Android-Gerät veröffentlichen. Wie kann ich das tun, um Unity anzuweisen, mein Spiel auf die Auflösung des Geräts zu skalieren? Ist es möglich zu tun? 

Danke im Voraus!

11
Zwiebel

Die Antwort auf Ihre Frage hängt weitgehend davon ab, wie Sie das Spiel implementiert haben. Wenn Sie es mit GUI-Texturen erstellt haben, hängt es weitgehend davon ab, wie Sie Ihre Objekte im Vergleich zur Bildschirmgröße platziert bzw. deren Größe angepasst haben. Dies macht die Sache etwas schwierig.

Wenn der Großteil Ihres Spiels aus Objekten besteht (z. B. Flugzeuge, Würfel usw.), gibt es zwei Methoden, die ich normalerweise verwende.

1) Die erste Methode ist sehr einfach zu implementieren, sieht aber nicht immer zu gut aus. Sie können das Seitenverhältnis der Kamera einfach an das von Ihnen entwickelte Spiel anpassen. In Ihrem Fall würden Sie also, da Sie Ihr Spiel bei 4: 3 entwickelt haben, Folgendes tun: 

Camera.aspect = 4f/3f;

Wenn jedoch jemand auf einem Bildschirm spielt, der für 16: 9 gedacht ist, sieht das Spiel am Ende verzerrt und gestreckt aus.

2) Die zweite Methode ist nicht so einfach, erfordert viel Arbeit und Berechnungen, liefert jedoch ein viel saubereres Ergebnis. Wenn Sie eine orthografische Kamera verwenden, ist zu beachten, dass die orthografische Kamera unabhängig von der verwendeten Bildschirmauflösung die Höhe auf einer festgelegten Höhe hält und nur die Breite ändert. Bei einer orthographischen Kamera mit einer Größe von 10 wird die Höhe beispielsweise auf 2 festgelegt. Wenn Sie dies berücksichtigen, müssen Sie die größtmögliche Kamera in jeder Ebene ausgleichen (z. B. einen breiten Hintergrund) ) oder ändern Sie die orthografische Größe der Kamera dynamisch, bis ihre Breite der von Ihnen erstellten entspricht.

Wenn Sie ein 3D-Spiel mit einer stereoskopischen Kamera gemacht haben, sollte die Bildschirmauflösung nicht wirklich das Aussehen beeinflussen, aber ich denke, das hängt vom Spiel ab, daher wären mehr Informationen erforderlich

16
Steven Mills

Die Art und Weise, die ich gemacht habe, ist, das Kamera-Ansichtsfenster entsprechend dem Seitenverhältnis des Geräts zu ändern

Sie können dies in einem beliebigen Skript tun 

float xFactor = Screen.width / 800f;
float yFactor = Screen.height  / 1280f;


Camera.main.rect=new Rect(0,0,1,xFactor/yFactor);

und das funktioniert wie magie

9
Rohit

Hier ist mein Skript zum Skalieren der orthographischen Kamera in 2D-Spielen

public float screenHeight = 1920f;
public float screenWidth = 1080f;
public float targetAspect = 9f / 16f;
public float orthographicSize;
private Camera mainCamera;

// Use this for initialization
void Start () {

    // Initialize variables
    mainCamera = Camera.main;
    orthographicSize = mainCamera.orthographicSize;

    // Calculating ortographic width
    float orthoWidth = orthographicSize / screenHeight * screenWidth;
    // Setting aspect ration
    orthoWidth = orthoWidth / (targetAspect / mainCamera.aspect);
    // Setting Size
    Camera.main.orthographicSize = (orthoWidth / Screen.width * Screen.height);
}
1
Dias

Ein einfacher Weg, dies zu tun, ist die Betrachtung Ihres Ziels. Ich meine, wenn Sie ein Spiel für Iphone 5 machen, dann ist das Seitenverhältnis 9:16 v oder 16: 9 h.

   public float targetRatio = 9f/16f; //The aspect ratio you did for the game.
void Start()
{
   Camera cam = GetComponent<Camera>();
   cam.aspect = targetRatio;
} 
1
Nelson Austria

Ich nehme an, es ist 2D statt 3D, was ich mache :

  1. Erstellen Sie ein Canvas-Objekt
  2. Stellen Sie den Canvas Scaler so ein, dass er mit der Bildschirmgröße skaliert
  3. Stellen Sie die Referenzauflösung zum Beispiel auf 480x320 ein
  4. Stellen Sie den Bildschirmanpassungsmodus auf Anpassen an oder Höhe ein
  5. Setzen Sie die Übereinstimmung auf 1, wenn Ihre aktuelle Bildschirmbreite kleiner ist, und auf 0, wenn die Höhe kleiner ist
  6. Erstellen Sie ein Bild als Hintergrund im Canvas-Bereich
  7. Füge das Seitenverhältnis-Anpassungsskript hinzu
  8. Stellen Sie den Seitenverhältnis-Modus so ein, dass er in das übergeordnete Element passt (sodass der UI-Anker überall sein kann).
  9. Stellen Sie das Seitenverhältnis auf 480/320 = 1,5 ein

Und füge dieses Snippet auf der Canvas 'Awake Methode hinzu:

var canvasScaler = GetComponent<CanvasScaler>();
var ratio = Screen.height / (float) Screen.width;
var rr = canvasScaler.referenceResolution;
canvasScaler.matchWidthOrHeight = (ratio < rr.x / rr.y) ? 1 : 0;

Für 3D-Objekte können Sie eine der obigen Antworten verwenden

0
Kokizzu