Lernen Sie Dragon Crashers kennen - unser neuestes 2D-Beispielprojekt

Im Release-Zyklus 2019 von Unity haben wir unsere Vision verwirklicht, 2D-Künstlern und -Entwicklern eine komplette Suite von 2D-Werkzeugen zur Verfügung zu stellen. Die Veröffentlichung unserer 2D-Pakete umfasste die Animation von Charakterskeletten und Inverse Kinematik (IK), Leveldesign mit Tilemaps, Spline Shapes und Pixel Art Tools. Auf unserer 2D-Website finden Sie einen Überblick.

Unser 2D-Team hat seitdem diese Arbeitsabläufe optimiert und die Grafiktechnologie verfeinert: den 2D-Renderer innerhalb der Universal Render Pipeline. Es gibt keine bessere Möglichkeit, diese Werkzeuge zu testen und zu sehen, wie sie Ihre 2D-Grafiken zum Strahlen bringen können, als ein neues Beispielprojekt zu erforschen. Dragon Crashers ist jetzt kostenlos im Asset Store erhältlich.
Dragon Crashers ist ein offizielles Beispielprojekt in Unity 2020.2, das die nativen 2D-Werkzeuge und die Grafiktechnologie von Unity vorstellt. Das Gameplay ist ein vertikaler Ausschnitt eines seitwärts scrollenden Idle-RPGs, wie es heute auf mobilen Plattformen beliebt ist.
Während die Heldengruppe ihre Feinde automatisch angreift, können Sie Spezialangriffe auslösen, indem Sie einfach die verschiedenen Avatare berühren oder anklicken.
Das Beispielprojekt wurde auf Desktop-, Mobil- und Web-Plattformen getestet.
Zusätzlich zu den Informationen in diesem Artikel, besuchen Sie bitte unser Online-Webinar zu Dragon Crashers am 14. April um 11:00 Uhr EST (17:00 Uhr MEZ), um wichtige Tipps und einen Live-Durchgang von unserem globalen Content-Entwickler Andy Touch zu erhalten. Bringen Sie mich zum Registrierungsbereich.

Stellen Sie sicher, dass Sie Unity 2020.2 oder 2020 LTS haben, um das Projekt in den Asset Store zu bekommen. Starten Sie zunächst ein neues 2D-Projekt und gehen Sie dann zu Paketmanager > Meine Assets, um Dragon Crashers zu importieren. Es werden einige Popup-Meldungen zu den Projekteinstellungen angezeigt, die Sie alle akzeptieren sollten.
Wenn ihr auf Probleme stoßt, lasst es uns bitte im 2D-Forum für Dragon Crashers wissen.

Sobald das Projekt importiert ist, sollten Sie eine neue Option in der Menüleiste sehen, die Verknüpfungen zu den Szenen des Projekts bietet. Wählen Sie Load Game Menu und drücken Sie Play, um es auszuprobieren.

Wir empfehlen die Verwendung von hochauflösenden Display-Einstellungen in der Spielansicht, wie z. B. die Einstellung Full HD (1920×1080) oder 4K UHD (3840×2160).

Unsere Gruppe von Helden und Basisgegnern ist vielfältig und mit verschiedenen Outfits, Accessoires und Variationen ausgestattet. Sie sind jedoch alle Zweibeiner, die einen ähnlichen Körperbau haben.
Um zu vermeiden, dass jeder einzelne von ihnen mit den jeweiligen 2D-IK-Constraints animiert wird, haben wir eine Schaufensterpuppe erstellt. Der Animator benutzte diese Schaufensterpuppe, während der Zeichner einzigartige Häute und Accessoires für die Figuren entwarf.

Die Mannequin Prefab(PV_Character_Base_Bipedal.prefab) wurde verwendet, um Prefab-Varianten für jeden Charakter zu erstellen. Der einzige Unterschied zwischen diesen Varianten ist das Sprite Library Asset, bei dem wir das visuelle Erscheinungsbild der zweibeinigen Figur austauschen.
Alle Assets der Charakter-Sprite-Bibliothek haben die gleiche Kategorie und Bezeichnung, um die Körperteile und ihre Varianten zu definieren. Zum Beispiel haben der Ritter und die Skelett-Feinde beide eine Kategorie namens "Mund", mit Sprite-Varianten wie "Mund offen", "Mund Zähne" und "Mund normal" während der Animation verwendet.
Um die Animationen auf alle Charaktere anzuwenden, stellen Sie sicher, dass jedes visuelle Asset oder PSB eines Charakters ein ähnliches Rig hat. Mit anderen Worten, sie müssen gleich benannte Knochen haben, die an Körperteile derselben Kategorie und desselben Labels gebunden sind. Um Zeit zu sparen, können Sie das Skelett der Schaufensterpuppe (oder die Knochen des Referenzcharakters) kopieren und es in die verschiedenen Charaktere einfügen. Diese Option ist im Skinning-Editor, einem Teil des Sprite-Editors, verfügbar.

Die Prefabs enthalten Funktionen, die die Charaktere lebendiger machen, wie Inverse Kinematik und Normal- und Mask-Maps für eine bessere Integration in die 2D-Lichtumgebung.

Es gibt keinen Grund, das Design eines Levels so früh im Prozess des Prototyping in Stein zu meißeln. Mit den in Unity enthaltenen 2D-Werkzeugen für die Welterstellung können Sie spielerisch Levels entwerfen und diese anschließend problemlos überarbeiten. Der Tilemap-Editor und die Sprite-Form helfen dabei, Aufgaben zu automatisieren, wie z. B. das Einrichten von Kollidern zur Anpassung an Objekt- oder Geländeformen, während die Szenenansicht Ihre Spielwiese ist, um das Spiel aufregender und ästhetisch ansprechender zu gestalten.
Der wichtigste Aspekt ist, dass Sie alle Ihre "Pinsel" in der Kachelpalette bereit haben, die wiederholbare Kacheln, animierte Kacheln, isometrische oder sechseckige Kacheln oder sogar GameObjects enthalten kann, die alle mit nur einem Renderer (Tilemap Renderer) performant gerendert werden. Alle Elemente des Rasters finden Sie in der Palette_GroundAndWalls Tile Palette.

Eine weitere oft übersehene Funktion, die beim Leveldesign nützlich sein kann, ist der Sprite Draw Mode. Gekachelte Sprites, die für Hintergrundebenen verwendet werden, können einen großen Szenenbereich mit einem kleinen Sprite abdecken, um einen schönen Parallaxeneffekt zu erzeugen.

Ein Tilemap-Raster ist möglicherweise nicht die praktischste Lösung, um organischer aussehende Objekte oder Spline-basierte Elemente zu Ihrem Projekt hinzuzufügen. Stattdessen empfehlen wir ein splinebasiertes Werkzeug wie 2D Sprite Shape, das ähnlich wie ein Vektorzeichenprogramm zeichnet. Verwenden Sie es als Hintergrundrequisite oder als Teil des Spiels. Mit dem SpriteShape Renderer können Sie effizient viele Sprites rendern, die am Spline oder am Rand Ihrer Formen befestigt sind. Siehe Prefab P_MineCartTracks_A , um zu sehen, wie die Gleise mit der Spline-Linie gezeichnet werden und wie die Stützstruktur aus der Fülltextur des Sprite-Formprofils erstellt wird.

Prefab P_Bridge oder P_MineCartTracks_B sind weitere Beispiele, die zeigen, dass eine Sprite Shape-Umrandung nicht nur eine einfache Linie sein muss, sondern auch komplexere Elemente darstellen kann - in diesem Fall eine Brücke und ein Gleis.

Mit dem 2D-Renderer können Sie den Sprite-Lit-Shader für erweiterte Lichteffekte verwenden. Nutzen Sie diese Effekte in vollem Umfang, indem Sie Ihren Sprites sekundäre Texturen geben.

Normal Maps können im Sprite-Editor hinzugefügt werden. Diese RGB-Bilder stellen die XYZ-Richtung dar, in die das Pixel zeigt, und signalisieren den 2D-Lichtern, wie stark sie beeinflusst werden sollen. Maskenmaps können auch durch das 2D-Renderer-Daten-Asset(RenderData_2D.asset im Projekt) genutzt werden, das Teil der Funktion Light Blend Styles ist. Der Lichtüberblendungsstil "Fresnel" wird verwendet, um das Randlicht um Charaktere und Sprites zu akzentuieren. Um beispielsweise den Fresnel-Effekt zu erzielen, wählen Sie die Verwendung der R-Kanal-Informationen aus den Mask-Maps. In diesem speziellen Projekt gibt es nur einen Lichtüberblendungsstil, so dass die drei Kanäle - R, G und B - gleich aussehen (schwarz und weiß). Das macht die Erstellung von Maskenkarten einfacher.

Shader Graph wird in der Demo häufig verwendet, um Requisiten zu animieren, ohne die CPU zu belasten. Sie können Elemente wie Wind, der die Spinnennetze bewegt(P_SpiderWeb_Blur prefab), leuchtende Kristalle(P_Crystals_Cluster) sowie die Animation der fließenden Lava(P_Lava_Flowing_Vertical) beobachten, die eine Flow-Map-Textur nutzt, um die Richtung der UV-Koordinaten der Haupttextur zu steuern. Die Fließtextur verwendet die Farben Rot und Grün, um die XY-Richtung anzugeben, der die Pixel in jedem Bild folgen. Öffnen Sie die SubGraph FlowMap, um zu erfahren, wie Sie diesen Effekt erreichen können.

In derselben Drachenkampfszene gibt es eine weitere Shader-Animationstechnik, das so genannte "animierte Alphaclipping", das eine flüssige Animation aus einer einzigen Textur erzeugt. Dies geschieht durch die Anzeige eines bestimmten Bereichs von Pixeln in jedem Bild auf der Grundlage ihrer Alphawerte. Visuelle Effekte wie der Lavasplatter(ParticleSystem_Splatters) oder die Trefferanimation(P_VFX_HitEffect) wurden mit dieser Technik mit Shader Graph erstellt.

Der künstlerische Stil der Demo wurde mit Rücksicht auf 2D-Lichter - und ihre vielen Möglichkeiten - erstellt. Wie Sie sehen können, sind Sprites, die durch die handgefertigten Normal Maps und Mask Maps verbessert wurden, relativ flach. Einige Sprites, wie z.B. der Tilemap-Boden, sind Graustufen, d.h. sie werden mit der Farboption des Tilemap-Renderers in Kombination mit den beleuchteten Bereichen der Umgebung eingefärbt.

Echtzeit-2D-Lichter ermöglichen es Ihnen, mehr Zeit in der endgültigen Spielszene im Unity Editor zu verbringen. Wenn Sie die direkten Ergebnisse beobachten, während Sie Ihre Szene mit Lichtern und Objekten zusammenstellen, oder sogar die Möglichkeit haben, den Level während des Spiels zu spielen, können Sie die gewünschte Stimmung und Atmosphäre für Ihr Spiel besser aufbauen.
Außerdem können Sie die Immersion erhöhen, indem Sie diese Elemente animieren. Zum Beispiel zeigt die P_Lantern_HangingFromPost Prefab, wie man ein Licht an ein animiertes Objekt anbringt oder der Hexenfigur einen Stab mit Sprite-Lit-Partikeln gibt
Ein weiterer Vorteil der Verwendung von 2D-Lichtern in Ihrem Projekt ist die Möglichkeit, Elemente wiederzuverwenden. Umgebungen und Requisiten können je nach Lichtverhältnissen sehr unterschiedlich aussehen, so dass Sie mit denselben Sprites viele verschiedene Levels erstellen können.
Für die Erstellung, Strukturierung, Verwaltung und Iteration des Gameplays verwendete unser Demoprojekt eine Kombination aus skriptfähigen Objekten und Prefabs.
Alle sieben Charaktere, unabhängig davon, ob sie Helden oder Schurken sind, erben ihre Kernstruktur von der Basiseinheit Prefab und verwenden denselben Verhaltenscode. Um die Werte zwischen den Zeichen zu unterscheiden, haben wir skriptfähige Objekte für verschiedene "Blöcke" von einheitenbasierten Werten verwendet. Fest kodierte Werte machen es für Nicht-Programmierer schwierig, das Spiel auszubalancieren, und führen zu einem starren Gameplay. Deshalb haben wir Einheitenwerte wie "Angriffsschadenshöhe", "Abklingzeit der Fähigkeit in Sekunden" und "Lebenspunkte der Einheit" in skriptfähigen Objekten festgelegt, damit jeder, der am Projekt arbeitet, schnelle Anpassungen vornehmen kann. Diese Wertänderungen werden dann vom Gameplay-Code dynamisch verarbeitet.

Jede vorgefertigte Einheit verfügt über ein zentrales "UnitController"-Skript, das als "Gehirn" der Einheit fungiert und interne Skriptverweise und Verhaltenssequenzen verwaltet. Wenn der Drache beispielsweise angegriffen wird, führt der "UnitController" entsprechende Verhaltensereignisse aus, wie z. B. den Übergang zu einer Zuck-Animation, das Abspielen eines Brüll-Soundeffekts und die Verringerung der Lebenspunkte des Drachens. Diese Kernverhaltensweisen halten sich an das Konzept der Kapselung und behandeln nur ihre eigenen Zwecke und Aufgaben. UnitHealthBehaviour verarbeitet beispielsweise nur die Logik, einschließlich des Setzens und Entfernens von Gesundheitswerten einer Einheit, und meldet wichtige Ereignisrückrufe, wie "HealthChanged" oder "HealthIsZero". Der "UnitController" sendet jedoch Werte an das "UnitHealthBehaviour", die auf den Szenarien und Aktionen basieren, die während des Spiels stattfinden.

In einigen Fällen müssen die Systeme außerhalb der Einheiten aktualisiert werden, wenn ein bestimmtes Ereignis eintritt. Für diese Einsätze werden Delegierte eingesetzt.
Zum Beispiel: Wenn die Hexe durch einen Angriff Schaden erleidet und 'UnitHealthBehaviour' das Ereignis 'HealthChanged(int healthAmount)' ausführt, kann das extern abonnierte 'UIUnitHealthBehaviour' den Lebenspunktebalken der Hexe entsprechend diesem Wert aktualisieren.
Die Verwendung von Delegaten ermöglicht es uns, Bereiche zu isolieren und zu testen, ohne von anderen Systemen abhängig zu sein. Dazu gehörte z. B. das Testen der Leistung des Pop-up-Schadensanzeigesystems in einer separaten Szene, ohne dass das Kampfgeschehen simuliert werden musste.

Die Timeline-Funktion von Unity wurde in zwei Bereichen eingesetzt: Lineare Zwischensequenzen und die Sequenzen der Fähigkeiten der einzelnen Einheiten.
Die linearen Zwischensequenzen finden am Anfang und am Ende eines Kampfes statt. Sie übernehmen die Sequenzierung für eine Vielzahl von Bereichen, wie Kameraübergänge (mit Cinemachine), Charakteranimationen (mit Animator), Audioclips, Partikeleffekte und UI-Animationen. Jeder Track wurde an die entsprechende Szeneninstanz gebunden.
Ein Timeline Signal wurde am Ende der Intro Cinematics eingebettet, um ein Unity Event aufzurufen, wenn die Cutscene beendet ist. Damit wird "signalisiert", wann die Logik des Kampfspiels beginnen soll.
Timeline wurde verwendet, um vorgefertigte Fähigkeitssequenzen für jede Einheit zu erstellen. Dies ermöglicht es jeder Einheit, ihre eigenen Spezialfähigkeiten zu haben, die mit ihrem Charakter verbunden und assoziiert sind; ähnlich den Champion-Fähigkeiten in einem MOBA-Spiel.
Jede Einheit verfügt über zwei Fähigkeits-Timelines: einen "Basis"-Autoangriff und einen "Spezial"-Angriff, der manuell aktiviert wird. Das Skript 'UnitAbilitiesBehaviour' steuert die Logik für beide Fähigkeits-Timelines in Bezug auf die aktuell gespielte Fähigkeit, die Fähigkeits-Sequenz-Warteschlange und das Starten/Stoppen von Fähigkeits-Abklingzeiten (je nach übergeordneter Gameplay-Logik, z. B. ob die Intro-Cutscene läuft oder ob eine Einheit gestorben ist). Ability Timeline Tracks, die an lokale Systeme der Unit Prefab gebunden sind, einschließlich Character's Animator für Angriffsanimation und Particle Systems für VFX. Auf diese Weise konnten sowohl der Programmierer als auch der Künstler die spezifischen Fähigkeiten einer Einheit im Prefab-Bearbeitungsmodus isoliert erstellen, wiedergeben und überarbeiten, bevor die Änderungen auf jede Instanz der Einheiten-Prefab im Spiel angewendet wurden.

Timeline-Signale wurden verwendet, wenn eine Fähigkeit eine Art von Wertmodifikator auf die Gesundheit des Ziels einer Einheit anwenden sollte. Wenn der Ritter zum Beispiel sein Schwert schwingt, soll der Schaden zugefügt werden, sobald das Schwert einen kritischen Punkt in der Animation erreicht, und nicht am Anfang oder am Ende des Schwertschwungs. Als sich das Timing für Animationen und VFX während der Entwicklung änderte, positionierte der Künstler das "Ability Happened"-Signal in einem sehr schnellen Arbeitsablauf an den neuen gewünschten Punkt der Sequenz, ohne dass der Programmierer irgendwelche Werte im Code ändern musste.
Dies ermöglichte es uns auch, mehrere "Fähigkeit passiert"-Signale in einem kontinuierlichen Angriff hinzuzufügen, wie z. B. der Drache, der Feuer auf die Gruppe von Helden spuckt.

Der leitende globale Inhaltsentwickler Andy Touch veranstaltete ein Webinar, in dem er den Character Pipeline Workflow, der für die Erstellung des Projekts verwendet wurde, im Editor demonstrierte. Dieses Webinar vermittelte, wie man:
- Exportieren einer 2D-Figur aus Photoshop in Unity
- Einrichten des Sprite-Rigs eines Charakters
- IK für die Gliedmaßen eines Charakters einrichten
- Verwenden Sie Sprite Swapping für verschiedene Charaktere
- Verschachtelte Prefabs für Waffenaufsätze verwenden
- Sprite-Normal- und Maskenkarten für 2D-Beleuchtungsstile anwenden
- Sequenzen von Charakterfähigkeiten mit Timeline
Als Dankeschön dafür, dass ihr Dragon Crashers mit uns erkundet habt, möchten wir euch eine Reihe von Hintergrundbildern, Zoom-Hintergründen und anderen visuellen Elementen zur Verfügung stellen, die euch auf eurer Reise zur Entwicklung von 2D-Spielen inspirieren sollen. Holen Sie sich die Dragon Crasher-Hintergründe hier.

Für diejenigen, die ein neues 2D-Projekt beginnen, gibt es bereits einige großartige Anleitungen im Blog und in den Foren. Wenn Sie die Tools noch nicht kennen, empfehlen wir Ihnen, die 2D-Webseite, den Blog 2D Tips Lightning Round und die Präsentation zu besuchen, um nützliche Tipps zu erhalten. Wenn Sie noch mehr wissen möchten, sehen Sie sich hier einen tiefen Einblick in unser Skelett-Animationssystem an, oder unser früheres Projekt, die Verlorene Krypta und das dazugehörige Webinar. Wie immer empfehlen wir auch einen Blick in unsere aktuellen Dokumentationen und natürlich in den 2D-Renderer-Bereich, um weitere Informationen zu bestimmten Funktionen oder APIs zu erhalten.