Eine Blitzrunde mit tollen Tipps für 2D-Spiele

Planen Sie, ein 2D-Spiel mit Unity zu entwickeln? Dann werfen Sie einen Blick auf diese praktischen Tipps unseres technischen 2D-Produktmanagers Rus Scammell und unseres 2D-Produktmarketingmanagers Eduardo Oriz, die Ihnen helfen werden, schnell loszulegen und während Ihres gesamten Projekts effizient zu arbeiten.

Verwenden Sie die 2D-Vorlage, um schnell mit einem neuen Projekt zu beginnen. Die Vorlage ist über den Unity Hub erhältlich. Einzigartige Einstellungen sind:
- Eine Standardszene, die eine 2D-Ansicht verwendet und mit einer auf orthografische Projektion eingestellten Kamera ausgestattet ist und in einer Volltonfarbe gelöscht wird
- Der Editor ist standardmäßig auf den 2D-Modus eingestellt, damit neue Texturen als 2D Sprites importiert werden
- Global Illumination in Echtzeit deaktiviert
- Installation der 2D-Pakete, einschließlich 2D Animation, 2D Pixel Perfect, 2D PSD Importer und 2D SpriteShape, sowie der erforderlichen Abhängigkeiten

Ab 2020.2 werden die 2D-Menüpunkte als Top-Level-Menüs für die Erstellung von GameObjects und Assets angezeigt. Dazu gehören eine Reihe primitiver 2D Sprites für schnelles Prototyping. Es wurden auch Menüs für neuere Funktionen wie SpriteShape und die Pixel Perfect Camera hinzugefügt.

Pixels Per Unit (PPU) ist ein wichtiges Konzept in der 2D-Entwicklung. Die PPU eines Sprites bestimmt, wie viele Pixel der Breite oder Höhe in einem Sprite-Bild einer Entfernungseinheit im Weltraum entsprechen.
Berücksichtigen Sie die PPU Ihrer Sprites so früh wie möglich. Neben der Steuerung der Pixeldichte beeinflusst die PPU auch, wie Sprites von den Zeichenmodi des Sprite-Renderers und anderen Systemen wie Tilemap verwendet werden. Wählen Sie eine Pixeldichte, die dem Design Ihres Spiels und der Zielplattform entspricht, und vermeiden Sie unnötig große Texturen.

Der 2D PSD Importer importiert geschichtete Adobe Photoshop PSB Dateien in Unity. Es ermöglicht Ihnen, Funktionen wie Mosaic zu verwenden, um automatisch ein Sprite Sheet aus den importierten Ebenen und dem Charakter-Rig zu erstellen. Unity setzt dann die Sprites eines Charakters wieder so zusammen, wie sie in ihren Quelldateien angeordnet waren. Der Importer ist so konzipiert, dass er optimal mit dem 2D Animation System und mehrschichtigen Charakter-Workflows zusammenarbeitet.

Ziel ist es, die Anzahl der Durchgänge zu reduzieren, die erforderlich sind, um die endgültige Farbe auf den Bildschirm zu bringen. Wenn Pixel halbtransparent sind, müssen Sie bei der Berechnung der endgültigen Farbe jedes überlappende Pixel berücksichtigen. Das Überzeichnen von überlappenden transparenten Pixeln verlangsamt die GPU-Leistung, insbesondere auf weniger leistungsstarken Geräten oder wenn höhere Bildraten erforderlich sind. Alle Sprites in Ihrer Szene werden als transparent angesehen, aber es gibt Möglichkeiten, die Überzeichnung zu reduzieren.
Unity wird die Pixel nur innerhalb der Sprite-Maske überzeichnen. Bei "Full Rect" wird der gesamte Bereich überzeichnet, aber wenn "Mesh Type" auf "Tight" eingestellt ist, wird der zu überzeichnende Bereich reduziert, da das generierte Mesh nur den Umrissen des Sprites folgt und die leeren Bereiche ignoriert. Wenn Sie mehr Kontrolle über den Umriss des Meshes haben möchten, können Sie ihn im Sprite-Editor ändern.

Sie können auch das Überzeichnen reduzieren, indem Sie sich überlappende statische Sprites zusammenführen. Wenn sich die Sprites nicht bewegen müssen oder Sie sie nicht für einen Parallaxen-Effekt benötigen, können Sie sie zusammenfügen, sobald Ihr Level-Design fertig ist.

Wenn Sie viele Sprites mit statischen 2D Colliders haben, kombinieren Sie diese mit der Composite 2D Collider Komponente. Dies sorgt für eine bessere Leistung und einen sanfteren Aufprall auf der gesamten Oberfläche. Der Composite Collider kann mit Tilemaps verwendet werden; im Bild oben werden die lila Kacheln auf dem Bildschirm als Collider verwendet. Sie aktivieren es, indem Sie die Komponente hinzufügen und das Kästchen Composite markieren.
Ein Composite 2D Collider kann auch mit übergeordneten GameObjects verwendet werden. Vergewissern Sie sich, dass die Child Colliders aktiviert sind, indem Sie das Kästchen Used by Composite markieren. Eine andere Möglichkeit, Collider zu optimieren, besteht darin, manuell ein einfaches Polygon zu zeichnen, das gut zu Ihrem GameObjects passt.

Jeder Renderer, der mit einem GameObjects wie einem Sprite verbunden ist, hat einen gewissen Overhead. Um viele statische Sprites effizient darzustellen, verwenden Sie den Tilemap Renderer für eine performantere und bequemere Art, Ihr Spiel zu gestalten. Sie können Hunderte von Sprites mit nur einem Renderer rendern. Wenn Sie viele Sprites zu rendern haben, aber keine Sortierung benötigen, verwenden Sie den Tilemap Chunk Mode, um die CPU- und Speichernutzung zu reduzieren, was wichtig ist, wenn Sie auf Low-End-Geräte abzielen. Um ihn zu verwenden, legen Sie alle statischen Kacheln in dieselbe Tilemap und aktivieren Sie den Chunk-Modus.
Vergewissern Sie sich, dass sich alle Kacheln auch im selben Sprite Atlas befinden. Es kann sein, dass die Kacheln in der Szenenansicht nicht richtig angezeigt werden, aber sie werden richtig sortiert, wenn Sie den Spielmodus aufrufen. Eine Möglichkeit besteht darin, den Level im Einzelmodus zu entwerfen und erst dann in den Chunk-Modus zu wechseln, wenn Sie ihn veröffentlichen möchten.
Wenn Sie eine korrekte Sortierung der Sprites benötigen, z.B. um eine Figur vor und hinter den einzelnen Kacheln zu bewegen, verwenden Sie den Einzelmodus. Für Sprites, die bewegt werden müssen oder Gameplay-Funktionen haben, verwenden Sie den regulären Modus.
Sprite Shape ist das 2D-Werkzeug zum Entwerfen organischer Formen und Ebenen. Standardmäßig erlaubt die Sprite Shape API, die Knoten des Splines zur Laufzeit zu ändern, was die Leistung beeinträchtigen kann. Wenn Sie diese Laufzeitänderung nicht benötigen, können Sie die Geometrie des Splines backen oder zwischenspeichern, um die Leistung zu verbessern. Wählen Sie Sprite Shape Controller, aktivieren Sie Edit Spline und dann Cache Geometry, um das Mesh zu backen. Wenn Sie Unity 2019 LTS oder spätere Versionen verwenden und den Spline zur Laufzeit ändern, können Sie durch die Installation des Burst-Pakets eine große Leistungssteigerung erzielen. Rufen Sie den Paketmanager auf und installieren Sie Burst Version 1.3 oder höher.

Sie können Sprite-Formprofile verwenden, um Umgebungen ähnlich wie mit einer Vektorzeichensoftware zu gestalten. Die Profile können sowohl für das Spiel als auch für dekorative Elemente verwendet werden. Sie eignen sich gut für verschiedene Kunststile und das schnelle Füllen großer Flächen, wobei weniger Elemente benötigt werden.
Die Zeichenmodi des Sprite-Renderers helfen Ihnen dabei, die Größe Ihrer Assets zu reduzieren und das Leveldesign zu vereinfachen. Mit kachelbaren Sprites können Sie verschiedene GameObjects haben, die dasselbe Sprite in verschiedenen Größen verwenden, ohne es zu strecken. Gehe zum Sprite-Editor und verschiebe die gelben Griffe, um den Teil des Sprites einzurahmen, der gekachelt werden soll. Wenden Sie es an und gehen Sie dann zum GameObjects und ändern Sie den Sprite Renderer Draw Mode auf Tile Mode.
Sie können Ihren Level auch mit 9-Slicing-Sprites gestalten und dabei Blöcke verwenden, die scharf und proportional aussehen, während Sie sie skalieren und anordnen. Wählen Sie im Sprite-Editor den Bereich aus, der gekachelt werden soll, und vergewissern Sie sich, dass die Ecken in den Eckbereich passen, der nicht wiederholt werden kann.
Beim Entwerfen von 2D-Spielen wird es immer wieder Situationen geben, in denen einige GameObjects auf derselben Sortierebene und in derselben Reihenfolge liegen. Man könnte viele Ebenen und eine Logik hinter den sich bewegenden Sprites erstellen, um sie in der richtigen Reihenfolge anzuzeigen, aber das ist nicht effizient. Die Art und Weise, wie wir Unity die richtige Reihenfolge zum Rendern eines Sprites in diesen Situationen mitteilen, ist der Transparenz-Sortiermodus unter Projekteinstellungen. Unity sortiert Sprites in der Reihenfolge, die durch die Richtung eines Vector2 (in diesen Einstellungen durch die Achsen X und Y definiert) beschrieben wird. Sehen Sie sich an, wie Eduardo Oriz, Product Marketing Manager bei Unity, und Rus Scammell, Product Manager, diese Optimierung in ihrem Unite Now-Vortrag bei etwa 9:15 einrichten.

Die Erstellung eines Frame-by-Frame-Animationsclips in Unity ist einfach. Wählen Sie eine Sequenz von Sprites im Projektfenster und ziehen Sie sie in die Szenenansicht oder das Hierarchiefenster. Ein Animationsclip und ein Animator werden automatisch für Sie erstellt.
Wenn Sie die Animationsclips zu einem bestehenden Animator hinzufügen möchten, ziehen Sie einfach die Animationsbilder auf das GameObject des Animators. Der Clip wird dem Animator hinzugefügt. Halten Sie die Alt- oder Optionstaste gedrückt, während Sie die Animationsframes in die Hierarchie ziehen, wenn Sie für jedes Sprite ein anderes GameObject erstellen möchten.

Unity unterstützt sowohl Frame-by-Frame- als auch Bone-basierte Animationen. Hier sind die wichtigsten Unterschiede zwischen den beiden Ansätzen:
Bild für Bild
- Jeder Frame verwendet ein eigenes Sprite
- Zusätzliche Animationsclips erfordern mehr Sprites
- Bildrate und Geschwindigkeit sind in der Regel konstant
- Übergangsanimationen erfordern zusätzliche Sprites
- Funktioniert nicht mit 2D Inverser Kinematik (2D IK)
Auf Knochenbasis
- Jeder Animationsrahmen verwendet die gleichen Sprites
- Jeder Animationsclip verwendet die gleichen Sprites
- Gut geeignet für variable Animationsgeschwindigkeiten
- Animationssystem kann Übergänge für Clips erstellen
- Arbeitet mit 2D IK

Installieren Sie die Pakete Burst/Collections, um die 2D-Animationsleistung für hohe Bone-Anzahlen und Sprite-Meshes mit hohen Vertex-Anzahlen zu optimieren. Die Deformation von animierten Sprites zur Laufzeit wird ebenfalls eine Leistungssteigerung erfahren. Dies funktioniert, indem das 2D Animation-Paket die Burst-Kompilierung und Low-Level-Array-Utilities verwendet, um die Verarbeitung der Sprite-Mesh-Deformation durch Unity zu beschleunigen.
Stellen Sie sicher, dass Sie Unity 2020.2 sowie 2D Animation 5.0.x verwenden. Wenn Sie das Burst-Paket 1.3.3 oder neuer installieren, sollten Sie auch Collections installieren, das ein Vorschaupaket ist.


Wenn Sie ein Sprite für das Rigging vorbereiten, haben Sie die vollständige Kontrolle über das Mesh. Für einen schnellen Start bietet der Skinning-Editor eine automatische Tesselierung. Sie können dies jedoch anpassen, indem Sie mit den Mesh-Werkzeugen Scheitelpunkte hinzufügen und entfernen, um das benötigte Mesh zu erstellen.

Fügen Sie 2D-Kollider und Rigidbody 2D-Komponenten zu knochenbasierten Charakteren hinzu, um Bewegungen über das 2D-Physiksystem zu steuern. Im obigen Beispielbild aus dem Vortrag von Eduardo und Rus wurden Capsule Colliders zu jedem Bone sowie zu Rigidbody 2D-Komponenten hinzugefügt. Sie wurden dann mit Scharniergelenken verbunden. Sie können Winkelbegrenzungen für jedes Gelenk verwenden, um den Bewegungsbereich einzuschränken, und Sie können auch umschalten, ob die über ein Gelenk verbundenen Rigidbody-Komponenten miteinander kollidieren.

Achten Sie auf eine einheitliche Pixeldichte für alle Ihre Assets. Wenn Ihr Projekt z. B. 32 PPUs hat, können Sie davon ausgehen, dass eine Einheit 32 Pixel enthält, wie die Kachel auf der linken Seite des obigen Bildes.
Die Standard-2D-Kamera drückt die Größe in vertikalen Einheiten vom Mittelpunkt der Kamera aus. In das Beispielbild hier passen 10 Kacheln vertikal:

Wenn Ihre Assets beim Hinzufügen zur Szenenansicht im Vergleich zu Ihrem ursprünglichen Referenzbild zu klein erscheinen, liegt das höchstwahrscheinlich an einer nicht übereinstimmenden Auflösung.
Die Standard-PPU von Unity für Sprites ist auf 100 eingestellt. Wenn wir die Sprite-Asset-Konfiguration auf die 32 PPU unseres Projekts ändern, wird das Sprite die richtige Größe haben.

Standardmäßig ist die bilineare Filterung für Assets aktiviert, um harte Kanten zu glätten. Wenn Sie jedoch einen pixeligen Look im Retrostil wünschen, ändern Sie den Filtermodus auf Punkt, um scharf aussehende Grafiken zu erhalten, die den zu Beginn festgelegten Bildschirmplatz einnehmen.
Wenn Sie viele Assets in Ihr Projekt importieren müssen, ist es sehr zeitaufwändig, die Einstellungen für jedes einzelne Sprite an die Projekteinstellungen anzupassen. Erstellen Sie stattdessen eine Importvorlage oder eine Voreinstellung, damit jedes importierte Asset die von Ihnen gewünschte vordefinierte Konfiguration hat. Um dies zu tun:
1. Wählen Sie ein Asset mit der von Ihnen gewünschten Konfiguration
2. Klicken Sie auf das Einstellungssymbol neben dem Sprite-Asset, um daraus eine Vorlage zu erstellen
3. Speichern Sie sie unter einem Namen, der Ihnen hilft, sich an ihre Funktion zu erinnern.
4. Legen Sie es als Standard fest, damit alle neu importierten Assets diese Konfiguration haben (Sie sehen das voreingestellte Asset in Ihrer Projektansicht).

Wenn Sie mit Pixelgrafik arbeiten, stellen Sie sicher, dass der Bildschirm immer die gleiche Anzahl von Pixeln anzeigt und dass alle diese Pixel die gleiche Größe haben. Gehen Sie zunächst zu Ihrer Kamera und fügen Sie Pixel Perfect Camera hinzu. Setzen Sie die Asset-PPU auf diejenige, die Sie in Ihrer Pixelgrafik verwenden.
Sobald Sie die Pixel Perfect Camera-Komponente hinzufügen, übernimmt sie die Kontrolle über die Kamera im Spielmodus, aber Sie können die Änderungen auch im Editor sehen, wenn Sie Ausführen im Bearbeitungsmodus aktivieren.

In Ihrem Projekt können Zeichen und Objekte ihre Position, Drehung oder Größe ändern. Standardmäßig werden sie mit einer glatten Interpolation versehen, aber wenn Sie die von der PPU Ihres Projekts angegebenen Beschränkungen der Pixelkunst einhalten wollen, aktivieren Sie die Option Textur hochskalieren. Die GameObjects werden in Schritten von einem Pixel bewegt. Bei der Drehung und Skalierung werden auch die visuellen Beschränkungen beachtet. Erfahren Sie mehr über Tipps zur Erstellung von 8-Bit- und 16-Bit-Spielen im Retro-Look.
Gruppen sortieren: Mit Sortiergruppen können Sie 2D-Renderer zusammenfassen. Möglicherweise verwenden Sie die Funktionen Ebenen sortieren und Reihenfolge in Ebenen, um sicherzustellen, dass die Rendering-Reihenfolge für jedes Zeichen korrekt ist, aber das funktioniert nicht, wenn es Überschneidungen gibt und die einzelnen Teile verschachtelt werden.

Sie können eine Sortiergruppe auf dem Stamm-GameObject für jeden Charakter platzieren, um die Renderer zu gruppieren und sie als eine Einheit zu sortieren. Bei den Sortiergruppen verschachteln sich die Zeichen nicht mehr und werden als Gruppe sortiert. Sortiergruppen funktionieren mit allen 2D-Renderern und Partikelsystemen.
Sprite-Atlas: Dieses Asset packt mehrere Sprites in eine einzige kombinierte Textur. Unity kann dann diese einzelne Textur verwenden, um die Leistung zu erhöhen, indem ein einzelner Zeichenaufruf anstelle mehrerer Zeichenaufrufe für jedes Sprite, das sich in einem einzelnen Ordner befindet, ausgeführt wird.
Durch Hinzufügen eines Ordners zu einem Sprite-Atlas können Sie im Laufe Ihrer Produktion beliebig viele Sprites hinzufügen und entfernen, indem Sie einfach den Inhalt der gepackten Ordner ändern.

Es ist auch möglich, Varianten von Sprite Atlases zu erstellen, die unterschiedliche Größen oder Komprimierungseinstellungen haben, um eine Reihe von Plattformen mit denselben Quelldateien anzusprechen.
Sie sollten sich eine für Ihr Spiel geeignete Atlantenstrategie überlegen. Sprite Atlas wurde so konzipiert, dass Sie ein Gleichgewicht zwischen Produktivität, Flexibilität und Leistung finden können.
Sehen Sie, wie wir 2D-Künstler unterstützen; erfahren Sie, wie Odd Bug 2D-Lichter verwendet hat, um die Stimmung in ihrem Spiel Tails of Iron zu erzeugen; laden Sie das 2D-Beispielprojekt The Lost Crypt herunter, und lesen Sie diese ausführliche Anleitung zur Auswahl der besten Auflösung für Ihre 2D-Assets. Schließlich können Sie sich die Unite Now-Präsentation von Eduardo und Rus hier ansehen.
