Jump to content
Unity Insider Forum

2D Pixel Game Settings (Welche Auflösung, Pixel perfect,...)?


Recommended Posts

 

Hallo Leute,

Zuerst habe ich im Internet viel nach Lösungen zu diesem Thema gesucht, aber je mehr Videos und Erklärungen ich gesehen/ gelesen habe, desto mehr war ich verwirrt und weiß nicht wirklich, was jetzt der richtige Weg für mich ist.

Ich hoffe ihr könnt mir helfen. Ich möchte ein horizontales 2D-Pixel-Fight-Spiel erstellen und dafür die Pixel Perfect Camera verwenden. Ich möchte einen Pixeleffekt haben, aber dennoch mit Details, also einfach größere Sprites (64x64 ist mein Gedanke). Hier ist ein Bild, welchen Grad an Details ich mir für mein Spiel wünsche (ich hoffe, dass solche Verlinkung hier erlaubt ist):

https://i.redd.it/ytyfgoox4a6z.png

Ich dachte, ich stelle meine Sprites auf 64x64px ein. Nun meine Fragen, die ich einfach nicht beantwortet kriege:

1.) Welche Einstellungen sollte ich an der Kamera insgesamt vornehmen (Ortografische Größe, Auflösung, Position X-Y-Z)?

2.) Welche Einstellungen sind bei der pixel-perfect Kamera am sinnvollsten? - Ich möchte ein horizontales 16:9-Spiel. Ich weiß also, dass ich das Verhältnis auf 16:9 einstellen muss (z.B. 400:225, 384:216, ...). Aber welche Auflösung ist die beste für 64x64px-Sprites, um einen Stil wie im obigen Bild darzustellen?

3.) Wenn ich die Assets-Pixel per Unit auf 64 setze, sollten soweit ich verstanden habe, alle meine Sprites 64x64px haben. Was mache ich zum Beispiel mit einer Health Bar Sprite, die viel länger als 64px ist? Kann ich einfach das Sprite mit 64x128px erstellen oder wie löse ich das?

 

Vielen dank für eure Hilfe :)

Link to post
Share on other sites

Zu 1: Mit der Orthografischen Kamera Größe legst du fest, wie groß deine Sprites in der Kamera zu sehen sind. Also wieviel du vom Spielfeld sehen wirst. Spiel einfach mal mit rum. du wirst es erkennen.

Zu 2: Weiß ich nicht was du willst.

Zu 3: Die Einstellung besagt, wieviele Pixel in eine Einheit rein passen. Hast du also eine Spritefläche, die 1x1 groß ist, und du hast 64px per unit eingestellt, dann passen da 64 px in der Breite wie auch in der Höhe rein.
Stellst du 128px per Unit ein, dann passen da 128 Pixel in eine Einheit rein. Du kannst für jedes Sprite einen anderen Wert einstellen, wenn du es willst. Aber dann hast du natürlich nicht alle Objekte mit der gleichen Auflösung. Du hättest Sprites mit groben Auflösungen und welche mit feineren Auflösungen. Die Grafik des Sprites, muss ja nicht wirklich 64 px breit sein und wird sie auch nicht, es sei denn es ist ne Box, die genau 64x64 groß ist. Genauso, kann ein Sprite auch größer als 64px sein. Aber trotzdem weiß Unity wieviele px pro Einheit rein passen, und somit wird ein schmaleres Sprite auch weiterhin schlamer dargestellt und ein Breiteres auch wirklich breiter. Immer im Bezug auf die wirkliche Anzahl der Sprites zu dem Wert Pixel pro Einheit.
Soll dein Spiel konsistent sein, dann nutz für alle Sprites die gleichen Werte.

 

Link to post
Share on other sites

Danke zunächst einmal für deine Antwort.

Also zu 1 habe ich gemerkt, dass die Orthografische Größe sich fix ändert, wenn ich Einstellungen in der Pixel Perfect Kamera einstelle. Somit sind da Änderungen eig. nicht relevant, da die eh durch die pixel-perfect Einstellungen überschrieben werden, sobald ich in den game Mode rein gehe.

 

2: Ich lese überall irgendwelche Formeln, wie man genau die PPU und die dazugehörige Auflösung der Scene bzw. Kamera berechnet und auswählt. Aber ich verstehe den Gedanken und den Sinn dahinter nicht. 

Hier mal ein Link, wo das auch besprochen wird: https://hackernoon.com/making-your-pixel-art-game-look-pixel-perfect-in-unity3d-3534963cad1d (Stichwort: Camera Ortographic Size)

 

3: Ok, danke für die Erklärung. Also muss ich eigentlich lediglich nur darauf achten, die PPU überall gleich einzustellen, damit alle Sprites und alle Elemente die gleiche "Auflösung" bzw. "Schärfe" im Spiel besitzen. Weil sie dann alle die gleiche Anzahl Pixel in eine Einheit bekommen. Somit kann ich die genannte healthbar auch mit 64x128px erstellen, die PPU auf 64 stellen und sie wird passend angezeigt und besitzt die gleiche "Schärfe/Auflösung" wie die anderen Sprites, richtig?

Link to post
Share on other sites

zu 2)
Der Gedanke dahinter ist denke ich, dass der Pixel eines Sprites exakt einem Pixel der horizontalen Bildschirmaufösung entsprechen sollen und damit auch die PPU ein ganzzahliger Teiler der horizontalen Bildschirmauflösung in Pixel sein sollten.

Beispiel:
Bildschirmauflösung: 1024x768 (ratio = 1.33)
PPU = 64 = 64 Pixel pro Unity-Einheit damit 1024 Pixel / 64 Pixel = 16 Units (ein Unity-Würfel mit Scale 16)
=>
Wir wollen also das 16 Einheiten auf den Bildschirm passen, damit 16 Sprites nebeneinander die volle Breite des Bildschirms in Pixel ausfüllen
=>
damit die Ränder der 16 Unity-Einheiten links und rechts mit dem Bildschirmrand abschließen muss die Orthographic -Kamerasize wie folgt berechnet werden:
(16 / 2) * 768/1024 = 6   (Camera ortographic size)

Nimmt man nun beide Formeln und vermischt diese, dann kann man die Formel entsprechend kürzen:
Number Units = W / PPU = 1024 Pixel / 64 Pixel = 16
Camera ortographic size =  (16 / 2) * 768/1024
                                                    =  ((W / PPU) / 2) * 768/1024
                                                    =  (W / PPU / 2) * H/W
                                                    =  W / (PPU * 2) * H/W
                                                    =  W *H / (PPU * 2) * W
                                                    =  H / (PPU * 2) = H / PPU / 2

Damit ist das Spielfeld bestehend aus 16 Unity-Einheiten voll in der Kamerasicht (Viewport) und die 16 Sprites (64x64) in horizontaler Reihe sollten den Screen füllen

So sieht dann das Ergebnis in Unity aus (16 Figuren-Sprites a 64 Pixel in einer Reihe nebeneinander  = 64 * 16 = 1024 Pixel):

rABVL6Q.png

Link to post
Share on other sites

Aaaah, endlich verstanden! Vielen lieben Dank für die ausführliche Erklärung :)

Da ich eine Ratio von 1,777777 (16:9) anstrebe, habe ich mir als Auflösung 384x216 ausgesucht, um den Retro-Look etwas beizubehalten.

Somit käme ich bei einer PPU von 64px auf eine Ortho-Gröse von 1,68725. 

 

Zu dem anderen Thema, stimmt meine Theorie nun von oben zu 3? Kann ich also theoretisch jede Auflösung nehmen und bin nicht direkt an 64x64px Sprites gebunden. Jedoch muss ich deren PPU immer auf 64px stellen, dass alle Sprites einheitlich dargestellt werden? Somit kann ich größere Sprites erstellen, welche nicht in ein 64x64px Raster passen?!

Link to post
Share on other sites
vor 8 Stunden schrieb EXTSY:

Zu dem anderen Thema, stimmt meine Theorie nun von oben zu 3? Kann ich also theoretisch jede Auflösung nehmen und bin nicht direkt an 64x64px Sprites gebunden. Jedoch muss ich deren PPU immer auf 64px stellen, dass alle Sprites einheitlich dargestellt werden? Somit kann ich größere Sprites erstellen, welche nicht in ein 64x64px Raster passen?!

Habe es mal ausprobiert. Wenn du eine Texture mit 128x128 Pixel hast musst du die PPU auch auf 64 stellen. Damit erstreckt sich dieses Sprite nun über 128x128 Pixel im Game. Das Ganze klappt auch bei Texturen wie beispielsweise 512 x 64 (also wie bei deiner Healthbar). Dabei muss man bei der Healthbar ja nicht alle 64 Pixel "ausfüllen", da man die anderen Pixel ja über den Alphachannel ausblenden kann.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...