Unity 2D può essere utilizzato per creare giochi di pixel art?


16

Sto guardando le nuove funzionalità 2D introdotte in Unity 4.3 e penso che mi potrebbe mancare qualcosa.

A me sembra che siano progettati per giochi 2D ad alta risoluzione, in cui il ridimensionamento degli sprite è ok, ma non è adatto per i giochi di pixel art.

Uno sprite pixel-art è progettato per essere visualizzato esattamente 1: 1 pixel sullo schermo: il ridimensionamento lo distrugge (il ridimensionamento lineare è un'eccezione, cioè è possibile ridimensionarlo 2x, 3x, 4x ecc.).

Tuttavia non ho trovato il modo di "mostrarlo così com'è", apparentemente Unity insiste nel ridimensionarlo a qualunque risoluzione ritenga opportuno: potrei controllare il parametro Camera.size e il parametro "pixels to units" dello sprite , ma non sono riuscito a ottenere questo risultato.


1
Se non sbaglio, il gioco "Organ Trail" è stato interamente realizzato su Unity3d, prima della 4.3.
Felipe,

Risposte:


19

Questo articolo fornisce alcune utili spiegazioni, anche se prima dell'uscita 4.3:

Se stai cercando l'aspetto "pixel art", le dimensioni ortografiche della fotocamera sono di fondamentale importanza; questa è la parte più complicata di inchiodare 2D in Unity.

La dimensione ortografica esprime il numero di unità mondiali contenute nella metà superiore della proiezione della telecamera. Ad esempio, se si imposta una dimensione ortografica di 5, le estensioni verticali della finestra conterranno esattamente 10 unità di spazio mondiale. (Le estensioni orizzontali dipendono dalle proporzioni del display.)

Ricorda che il tuo quaderno dello sprite è di 1 unità su un lato. Ciò significa che la dimensione ortografica indica quanti sprite è possibile impilare verticalmente nella finestra (diviso per 2).

Per rendere la pixel art pulita, è necessario assicurarsi che ciascun pixel della trama di origine dello sprite sia mappato 1: 1 alla visualizzazione della finestra. Non vuoi che i pixel sorgente vengano saltati o raddoppiati, o i tuoi sprite appariranno distorti e "sporchi". Il trucco per garantire questo rapporto 1: 1 è impostare una dimensione ortografica che corrisponda alla risoluzione dello schermo verticale divisa per l'altezza in pixel di uno sprite.

Supponiamo che tu stia funzionando a 960x640 e stai usando sprite 64x64. Dividendo la risoluzione verticale dello schermo (640) per l'altezza in pixel di uno sprite (64) si ottiene 10, il numero di sprite 64x64 che possono essere impilati verticalmente in 640 pixel. Ricorda che la dimensione ortografica è una mezza altezza, quindi la dimensione ortografica target in questo caso sarà 5 (metà di 10). Dovrebbe sembrare come questo:

Se imposti la dimensione ortografica su metà o il doppio di quel bersaglio, potresti comunque ottenere risultati utilizzabili, perché la dimensione verticale dello sprite si dividerà ancora uniformemente nella dimensione verticale della finestra. Ma se imposti la dimensione ortografica in modo errato, vedrai alcuni pixel saltati o raddoppiati e sembrerà davvero molto male:

Risoluzione variabile

Non è necessario essere limitati a una singola risoluzione fissa per renderizzare la pixel art pulita. Il modo più semplice di gestire risoluzioni variabili è quello di collegare uno script personalizzato alla fotocamera che imposta la dimensione ortografica in base alla risoluzione verticale corrente e una dimensione di sprite nota (fissa) :

// set the camera to the correct orthographic size
// (so scene pixels are 1:1)
s_baseOrthographicSize = Screen.height / 64.0f / 2.0f;
Camera.main.orthographicSize = s_baseOrthographicSize;

Sebbene sia una soluzione semplice, ha uno svantaggio: quando la risoluzione dello schermo diminuisce, vedrai sempre meno il mondo e gli sprite occuperanno sempre più schermo. Questa è la conseguenza di mantenere un rapporto 1: 1 tra sorgente e pixel dello schermo: uno sprite 64x64 occupa più spazio apparente a 640x480 rispetto a 1920x1200. Se questo è un problema o no dipende dalle esigenze del tuo gioco specifico.

Se vuoi che i tuoi sprite rimangano delle stesse dimensioni apparenti indipendentemente dalla risoluzione dello schermo, imposta semplicemente la dimensione ortografica su un valore fisso e lascialo lì indipendentemente dalla risoluzione dello schermo. Lo svantaggio è che i tuoi sprite non avranno più un rapporto pixel sorgente-schermo 1: 1. Puoi mitigare gli effetti negativi di ciò consentendo solo risoluzioni esattamente la metà o esattamente il doppio della risoluzione target.

(un po 'di enfasi aggiunta)

Questo ovviamente funziona meglio se la risoluzione dell'altezza è divisibile per la dimensione dello sprite, ma anche quando non lo è, fornisce comunque una buona approssimazione di un risultato decente.


TL; DR :cameraSelf.orthographicSize = screenH / (float)spriteSize / 2f;


5
Un'altra cosa utile è impostare il filtro delle trame su "Punto".
Felipe,

@Felipe buon punto: me ne sono dimenticato perché l'ho già capito.
o0 '.
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.