Problemi di risoluzione durante il porting di un gioco Unity su Android


9

Quindi, sto trasferendo un gioco su Android per la prima volta in Unity3D. E ho incontrato alcuni problemi lungo la strada. Il mio problema attuale è che la risoluzione non sembra essere corretta, taglia i bordi dello schermo e i miei arresti di scorrimento per lo scorrimento dello schermo a sinistra / a destra non sono più nel posto giusto.

Dopo aver fatto un po 'di ricerche, molte persone dicono che devi rendere indipendente la risoluzione del tuo gioco per poter funzionare su tutti gli Android / Iphone / Ipad. È vero? In tal caso, come posso fare per farlo? In caso contrario, come posso aiutare a risolvere la risoluzione, quindi quando porto su dispositivi mobili sembra giusto?

EDIT: Non ho ancora quello che mi serve, le risoluzioni non funzionano ancora correttamente anche con il codice e i trucchi elencati di seguito. Ho bisogno di un modo per regolare la risoluzione in base al dispositivo. Per qualche motivo quando provo a recuperare la risoluzione di un dispositivo usando il codice di Mungoid, restituisce 0x0


1
Dovrai passare attraverso un po 'di codice che presuppone una determinata risoluzione dello schermo e modificarlo in modo che possa prendere l'attuale risoluzione dello schermo e fare qualcosa con esso. A seconda di cosa stai facendo e di come, non esiste una soluzione unica per tutti.
Tetrad

Per quanto riguarda le specifiche, questa domanda va in qualche dettaglio (ci sono un sacco di domande su questo sul sito) gamedev.stackexchange.com/questions/51/...
Tetrade

Ahh, quindi in sostanza ciò che Namar ha detto: "Assicurati di posizionare tutto con i rapporti. Ad esempio, una barra della salute verrebbe posizionata all'80% della larghezza dello schermo con il 10% della larghezza dello schermo per la sua scala orizzontale", quindi come posso correggere i riferimenti aree specifiche nello spazio? Lo scorrimento dello schermo si basa su aree specifiche dello spazio mondiale, ma sembra che si incasini le modifiche alla risoluzione.
Timothy Williams,

Potresti essere più specifico sul tuo problema? Dici che la risoluzione "non sembra essere corretta" ed è "ancora spenta", ma la risoluzione dello schermo è di solito una proprietà fissa del dispositivo. Quindi non è la risoluzione che è sbagliata, ma il modo in cui si esegue il rendering sullo schermo. Se fai ipotesi su quanto sia largo e alto lo schermo, avrai sempre problemi su diversi dispositivi e proporzioni.
Kylotan,

Immagino davvero quello che sto cercando di fare è scrivere un codice per trovare la risoluzione più bassa, impostare il gioco su quello e ridimensionare tutti gli oggetti di conseguenza. So come impostare la scala del campo di gioco, ma non riesco a ottenere la risoluzione del dispositivo. pertanto il gioco è "troppo ingrandito" o tutto è troppo grande.
Timothy Williams,

Risposte:


7

Un problema che incontrerai con Android è che ogni dispositivo diverso ha le sue dimensioni dello schermo, risoluzione e densità di pixel. Se vuoi che il tuo gioco appaia identico su tutti i dispositivi, ti aspetta molto lavoro e probabilmente non sarai mai soddisfatto dei risultati. O il gioco apparirà allungato su schermi widescreen o compresso su schermi non widescreen. Ti suggerisco di decidere cosa è veramente importante e lasciare che qualsiasi altra cosa scivoli un po '.

Senza schermate o conoscenza di ciò che è il tuo gioco e del suo aspetto, possiamo tutti ipotizzare soluzioni ma non abbiamo una direzione specifica per darti consigli specifici.

In Unity, puoi accedere alle dimensioni della schermata corrente con la classe Screen : Screen.widthe Screen.height(tra le altre proprietà). È quindi possibile modificare le proporzioni della fotocamera per modificare ciò che è visibile su schermi di dimensioni diverse in base alle dimensioni dello schermo e alle aspettative personali di ciò che dovrebbe essere visibile.

Se devi assicurarti che qualsiasi display HUD sia ridimensionato correttamente, puoi farlo cambiando la matrice di trasformazione della GUI in base alle dimensioni dello schermo in ogni OnGUI()funzione. L'ho già fatto creando questo semplice script e collegandolo a tutto ciò che ha reso gli elementi della GUI che volevo ridimensionare:

//GUI values in code are assigned based on an 800x600 screen
private var nativeWidth : float = 800.0f;  
private var nativeHeight : float = 600.0f;
private var guiMatrix : Matrix4x4;

function Start () 
{
    var scale : Vector3 = Vector3(Screen.width / nativeWidth, 
                                  Screen.height / nativeHeight,
                                  1.0f);
    guiMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
}

function GetGUIMatrix() : Matrix4x4
{
    return guiMatrix;
}

Quindi, nelle OnGUI()funzioni effettive , ho impostato subito la matrice di trasformazione:

function OnGUI()
{
    GUI.matrix = guiScale.GetGUIMatrix();
    /* Everything Else */
}

L'impostazione delle proporzioni della fotocamera in base alla larghezza e all'altezza dello schermo non aiuta, quando il telefono è verticale non viene visualizzato affatto e quando il telefono è orizzontale mostra esattamente lo stesso di prima. Il gioco è diviso in tre sezioni, scorri senza problemi tra le sezioni con il dito (come in Angry Birds), ecco un'immagine di come dovrebbe apparire il lato sinistro. E il mezzo . Ecco il lato sinistro quando il mio telefono è tenuto in verticale ,
Timothy Williams,

Ed ecco in orizzontale . Spero che queste immagini possano essere d'aiuto, questa è la prima volta che eseguo il porting da Unity ad Android, o addirittura realizzo un gioco Android. Mi sono perso un po '.
Timothy Williams,

A giudicare dalla (mia interpretazione di) le tue spiegazioni e le tue immagini, il problema non è la risoluzione; la tua fotocamera non è in una posizione che può eventualmente mostrare tutto ciò che desideri su un piccolo schermo. Riduci i livelli o sposta indietro la videocamera per mostrare di più o qualcosa del genere. Suggerirei di impostare una finestra di gioco molto più piccola per rappresentare la dimensione di un dispositivo reale anziché la dimensione 1230x530ish che hai ora in modo da poter avere un'idea di ciò che vedrai quando lo spingi sopra.
caos Tecnico,

Il problema è che ho già ingrandito notevolmente la fotocamera. Se il problema persiste, come posso spiegare con precisione varie schermate e dimensioni e modificarle?
Timothy Williams,

@TimothyWilliams, potresti probabilmente risolvere qualcosa scegliendo una risoluzione minima (800x600 o qualcosa del genere) con cui il tuo gioco funziona. Quindi, utilizzare Screen.widthe .heightin tandem con Camera.fieldOfViewe Camera.aspectper riprodurre la stessa vista su schermi di dimensioni arbitrarie. Richiederebbe solo qualche trigger per capire in modo specifico come farlo.
caos Tecnico,

0

potresti provare qualcosa di simile al seguente e applicarlo. Immagino che un dispositivo mobile dovrebbe restituire solo una risoluzione.

function Start()
{
    var resolutions : Resolution[] = Screen.resolutions;
    // Print the resolutions
    for (var res in resolutions) {
        print(res.width + "x" + res.height);
    }
    // Switch to the lowest supported fullscreen resolution
    Screen.SetResolution (resolutions[0].width, resolutions[0].height, true);
};

Dai un'occhiata qui per maggiori informazioni sullo schermo in unità http://unity3d.com/support/documentation/ScriptReference/Screen.html


Questo non mi ha aiutato, la risoluzione è ancora disattivata.
Timothy Williams,

Restituisce "0x0" sul mio Android per qualche motivo ...
Timothy Williams,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.