Kann Unity 2D verwendet werden, um Pixel-Art-Spiele zu erstellen?

16

Ich sehe mir die neuen 2D-Funktionen in Unity 4.3 an und vermisse möglicherweise etwas.

Für mich sieht es so aus, als wären sie für hochauflösende 2D-Spiele konzipiert, bei denen das Skalieren der Sprites in Ordnung ist, aber für Pixel-Art-Spiele ungeeignet ist.

Ein Pixel-Art-Sprite ist so konzipiert, dass es genau 1: 1 Pixel auf dem Bildschirm anzeigt: Durch Skalierung wird es zerstört (lineare Hochskalierung ist eine Ausnahme, dh Sie können es 2x, 3x, 4x usw. skalieren).

Ich habe jedoch keine Möglichkeit gefunden, "es einfach so anzuzeigen, wie es ist". Anscheinend besteht Unity darauf, es auf eine beliebige Auflösung zu skalieren: Ich kann den Parameter Camera.size und den Parameter "Pixel in Einheiten" des Sprites steuern , aber ich habe es nicht geschafft, dieses Ergebnis zu erzielen.

o0 '.
quelle
1
Wenn ich mich nicht irre, wurde "Organ Trail" vor 4.3 vollständig auf Unity3d erstellt.
Felipe

Antworten:

19

Dieser Artikel enthält einige nützliche Erklärungen, auch wenn diese vor Version 4.3 herausgekommen sind:

Wenn Sie den "Pixel Art" -Look bevorzugen, ist die orthografische Größe der Kamera von entscheidender Bedeutung. Dies ist der schwierigste Teil beim Nageln von 2D in Unity.

Die orthographische Größe drückt aus, wie viele Welteneinheiten in der oberen Hälfte der Kameraprojektion enthalten sind. Wenn Sie beispielsweise eine orthografische Größe von 5 festlegen, enthält die vertikale Ausdehnung des Ansichtsfensters genau 10 Einheiten des Weltraums. (Die horizontalen Ausmaße hängen vom Seitenverhältnis der Anzeige ab.)

Denken Sie daran, dass Ihr Sprite-Quad 1 Einheit pro Seite ist. Das heißt, die orthografische Größe gibt an, wie viele Sprites Sie im Ansichtsfenster vertikal stapeln können (geteilt durch 2).

Um das Pixel-Art-Aussehen sauber wiederzugeben, müssen Sie sicherstellen, dass jedes Pixel der Quelltextur des Sprites 1: 1 auf die Ansichtsfensteranzeige abgebildet wird. Sie möchten nicht, dass Quellpixel übersprungen oder verdoppelt werden, oder Ihre Sprites sehen verzerrt und „schmutzig“ aus. Der Trick, um dieses 1: 1-Verhältnis sicherzustellen, besteht darin, eine orthografische Größe festzulegen, die Ihrer vertikalen Bildschirmauflösung geteilt durch die Pixelhöhe eines Sprites entspricht.

Angenommen, Sie arbeiten mit einer Auflösung von 960 x 640 und verwenden 64 x 64-Sprites. Wenn Sie die vertikale Bildschirmauflösung (640) durch die Pixelhöhe eines Sprites (64) dividieren, erhalten Sie 10, die Anzahl der 64x64-Sprites, die in 640 Pixel vertikal gestapelt werden können. Denken Sie daran, dass die orthografische Größe eine halbe Höhe ist. In diesem Fall beträgt die orthografische Zielgröße also 5 (die Hälfte von 10). Es sollte so aussehen:

Wenn Sie die orthografische Größe auf die Hälfte oder das Doppelte dieses Ziels einstellen, erhalten Sie möglicherweise immer noch brauchbare Ergebnisse, da sich die vertikale Größe des Sprites immer noch gleichmäßig in die vertikale Größe des Ansichtsfensters aufteilt. Wenn Sie die orthographische Größe jedoch falsch einstellen, werden einige Pixel übersprungen oder verdoppelt, und es sieht in der Tat sehr schlecht aus:

Variable Auflösung

Sie müssen sich nicht auf eine einzige feste Auflösung beschränken, um saubere Pixelkunst zu rendern. Die einfachste Möglichkeit, mit variablen Auflösungen umzugehen, besteht darin, ein benutzerdefiniertes Skript an Ihre Kamera anzuhängen, mit dem die orthografische Größe entsprechend der aktuellen vertikalen Auflösung und einer bekannten (festen) Sprite-Größe festgelegt wird :

// 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;

Das ist zwar eine einfache Lösung, hat aber einen Nachteil: Wenn die Bildschirmauflösung abnimmt, sehen Sie immer weniger von der Welt, und Sprites nehmen immer mehr Platz auf dem Bildschirm ein. Dies ist die Konsequenz eines 1: 1-Verhältnisses zwischen Quell- und Bildschirmpixeln: Ein 64x64-Sprite belegt bei 640x480 mehr Platz als bei 1920x1200. Ob dies ein Problem ist oder nicht, hängt von den Anforderungen Ihres Spiels ab.

Wenn Sie möchten, dass Ihre Sprites unabhängig von der Bildschirmauflösung dieselbe scheinbare Größe haben, stellen Sie die orthografische Größe einfach auf einen festen Wert ein und lassen Sie sie dort, unabhängig von der Bildschirmauflösung. Der Nachteil dabei ist, dass Ihre Sprites kein 1: 1-Pixelverhältnis von Quelle zu Bildschirm mehr haben. Sie können die negativen Auswirkungen davon abmildern, indem Sie nur Auflösungen zulassen, die genau die Hälfte oder genau das Doppelte Ihrer Zielauflösung betragen.

(einige Hervorhebungen hinzugefügt)

Dies funktioniert natürlich besser, wenn die Höhenauflösung durch die Sprite-Größe teilbar ist, aber auch wenn dies nicht der Fall ist, liefert es dennoch eine gute Annäherung an ein anständiges Ergebnis.


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

o0 '.
quelle
5
Eine weitere nützliche Funktion ist, die Texturfilterung auf "Punkt" zu setzen.
Felipe
@Felipe guter Punkt: Ich habe das vergessen, weil ich es bereits herausgefunden habe.
o0 '.