2013-07-25 8 views
11

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 für jedes Android-Gerät mit jeder Auflösung veröffentlichen. Wie kann ich es tun, um Unity zu sagen, dass er mein Spiel bis zur Auflösung des Geräts skalieren soll? Ist es möglich zu tun?Wie kann ich mein Spiel so programmieren, dass es mit jeder Auflösung von Android-Geräten funktioniert? (mit Unity)

Vielen Dank im Voraus!

Antwort

16

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/dimensioniert haben, was die Dinge ein wenig schwierig macht.

Wenn der Großteil Ihres Spiels mit Objekten (wie z. B. Flugzeuge, Würfel, etc.) gemacht wird, dann gibt es zwei Methoden, die ich normalerweise verwende.

1) Erste Methode ist sehr einfach zu implementieren, sieht aber nicht immer zu gut aus. Sie können das Seitenverhältnis der Kamera einfach so ändern, dass es dem entspricht, in dem Sie Ihr Spiel entworfen haben. Also in Ihrem Fall, da Sie Ihr Spiel bei 4 entworfen haben: 3, Sie so etwas tun würde:

Camera.aspect = 4f/3f; 

Wenn aber jemand für die Wiedergabe auf einem Bildschirm bedeutete 16: 9, wird das Spiel beenden sieht verzerrt und gestreckt aus.

2) Die zweite Methode ist nicht so einfach, erfordert ziemlich viel Arbeit und Berechnungen, aber wird Ihnen ein viel saubereres Ergebnis geben. Wenn Sie eine orthographische Kamera verwenden, ist es wichtig zu beachten, dass die orthographische Kamera unabhängig von der Bildschirmauflösung die Höhe auf einer festgelegten Höhe behält und nur die Breite ändert. Beispiel: Bei einer orthographischen Kamera mit einer Größe von 10 wird die Höhe auf 2 eingestellt. In diesem Fall müssen Sie die größtmögliche Kamera in jeder Ebene kompensieren (z. B. mit einem breiten Hintergrund)) oder ändern Sie die Orthographische Größe der Kamera dynamisch, bis ihre Breite mit der von Ihnen erstellten übereinstimmt.

Wenn Sie ein 3D-Spiel mit einer stereoskopischen Kamera gemacht habe, Bildschirmauflösung beeinflussen soll nicht wirklich, wie es aussieht, aber ich denke, dass auf dem Spiel abhängt, würden so mehr Informationen

+0

ich ein Spiel machen mit Objekten (Würfel, Kugeln). Dieses Spiel ist ein 2D-Spiel in Unity 3D-Welt gemacht. – Zwiebel

+0

Wenn es 2D ist, dann müssen Sie die orthographische Kamera verwenden, also folgen Sie einfach den Tipps, die ich dafür gegeben habe. –

9

Die Art und Weise i erforderlich tat, ist zu Kamera-Ansichtsfenster zu ändern Seitenverhältnis nach Gerät Betrachten Sie das Spiel für 800x1280

Bilden Sie können dies des Skripts in einem 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

+1

Jungs das ist ein bisschen buggy, ich empfehle die @Nelson Austria Antwort, – Rohit

1

Eine einfache Möglichkeit, dies zu tun, ist Ihr Ziel, ich meine, wenn Sie ein Spiel für Iphone 5 dann das Seitenverhältnis ist 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

Die beste Lösung für mich ist es, den Satz von Schnittlinien zu verwenden, so dass es weder eine abgeschnittene an den Seiten noch eine Verzerrung der Spielansicht ist. Das bedeutet, dass Sie abhängig vom unterschiedlichen Seitenverhältnis zurück oder vorwärts gehen müssen.

Wenn Sie möchten, habe ich an asset on the Unity asset store, die automatisch den Abstand der Kamera korrigiert, so dass Sie nie eine Verzerrung oder einen Schnitt haben, egal welches Handheld-Gerät Sie verwenden.

1

Hier ist mein Skript, um die Kamera in orthographisch 2D-Spiele für die Skalierung

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); 
}