Wie ich aus einer Spine Animation einen Player Character für die Corgie Engine in Unity erstelle – Teil 1
Wir schauen uns mal an, wie man einen animierten Charakter aus Spine exportiert, in Unity importiert und daraus einen Player-Character mit Animation Controller für die Corgi Engine macht. Mit Problemen und Fallstricken.
Einleitung
Als ich erstmals mit der Corgi Engine (damals Version 3.0) für Unity (5.4) herumspielte, versuchte ich einfach den Spineboy aus den Example-Ordner der Animation-Software Spine zu importieren und anhand der Spine-Beispiele von Corgi so einzustellen, dass ich einfach einen der fertigen Animation Controller aus den Beispielen nehmen konnte, damit sich der Character entsprechend meiner Eingaben bewegt. Auch damals habe ich schon ewig rumgefummelt, um das hinzubekommen.
Über die Spine Runtime für Unity konnte man den Spineboy importieren und „Baken“, wie in den Corgi-Beispielen. Das „Baken“ war ein wenig versteckt. Damit erstellte die Runtime schon ein fast fertiges Prefab. Man musste dort nun noch einen passenden Animation Controller aus dem Beispiel-Ordner angeben und ein neues Prefab erstellen, welches alle benötigten Komponenten für einen Spine-Charakter besaß.
Nun, nach mehreren Versionssprüngen aller Komponenten (Spine 3.6, Spine Runtime, Unity 2017.2, Corgi 4.2), war es an der Zeit, einen eigenen animierten Spine-Charakter zu exportieren, in Unity zu importieren und zusammen mit Corgi zu verwenden. Der Prozess hat sich ein wenig verändert und es galt ein paar Besonderheiten mühsam durch Try & Error herauszufinden.
Fangen wir von vorn an.
Spine Export
Spine
Spine ist eine Software für professionelle 2D-Animationen für Spiele. In Spine werden Bilder mit Knochen verbunden und diese dann bewegt. Für fast alle relevanten Engines und Programmiersprachen sind Laufzeit-Bibliotheken verfügbar, um die Animationen in den Spielen zu laden und zu rendern. Somit benötigt man weniger Ressourcen und Assets als bei Frame-by-Frame Animationen.
Der Export aus Spine ist noch das Einfachste. Das geht relativ problemlos. Man muss nur folgende Punkte beachten:
- Export als JSON
- Unwesentliche Daten / Nonessential data anhaken (also alles exportieren)
- Schöne Ausgabe / Pretty print benötigt man nur, wenn man das JSON lesen möchte
- Atlas erstellen
Um den Atlas zu erstellen, ruft man einen Einstellungsdialog über den Button „Einstellungen“ auf. Dort stellt man die Ausgabeformate ein (PNG, Atlas), kann ggf. die Skalierung ändern und legt die Atlas-Erweiterung für die Datei fest.
Fallstrick: Atlas
Beim Erstellen des Atlas gibt es noch eine Besonderheit. Unity kann nicht mit einer *.atlas Datei umgehen. Deshalb muss man als Atlas-Erweiterung „atlas.txt“ angeben. Die Spine Runtime benennt das dann um und kann diese verarbeiten.
Ein Klick auf „Exportieren“ im ersten Dialog startet den Export und erstellt 3 Dateien im angegebenen Ordner.
Diese 3 Dateien können wir nun in Unity importieren.
Unity Import
Zunächst benötigt man die Spine Runtime. Das ist ein Asset für Unity, welches von den Entwicklern von Spine zur Verfügung gestellt wird.
Das aktuelle Package für Unity zum Herunterladen findet man unter folgendem Link:
http://de.esotericsoftware.com/spine-unity-download
Nach dem man das installiert hat, kann man ganz einfach die 3 Dateien aus dem Spine-Export in das Unity-Projekt ziehen. Die Spine-Runtime erstellt daraus die benötigten Assets.
- SkeletonData Asset mit den Daten der Bones und Animationen
- Material aus der Atlas Textur
- Atlas Asset
- Animation Controller
Im Inspektor kann man sich nun das SkeletonData Asset genauer anschauen. Dieses beinhaltet die Daten zum Anmationsobjekt, welche Spine in dem JSON exportiert hat. Also den Aufbau, den Atlas, die Bones, die Posen und die am Objekt gespeicherten Animationen.
Das Baken
Das Baken ist nicht (mehr) notwendig. Es wird sogar in der Corgi Dokumentation davon abgeraten. In den Beispielen bei Corgi wird das Baken nur verwendet, da sonst die Spine Runtime benötigt wird, welche von einem anderen Unity-Asset (hier also der Corgi Engine) nicht mitgeliefert werden darf. Soll das Unity-Asset allein lauffähig sein, ohne extra Installationen von Seiten der User, muss das Baken der Animation erfolgen. Dadurch wird ein Prefab und ein Animation Controller erstellt, der alle Animation Clips enthält. Die speziellen Spine-Funktionen sind dann nicht mehr vorhanden.
Nachzulesen ist das in der Corgi Dokumentation.
Um nun das Baken zu starten, muss man auf das Einstellungen-Rädchen im Inspektor des SkeletonData-Assets klicken und dort den Menüpunkt „Skeleton Baking“ wählen.
Es öffnet sich ein neues Fenster. Dort setzt man noch das Häkchen bei „Bake Animation“ und startet das Baken.
Es wird nun ein Prefab und ein Animation Controller erstellt.
Wie bereits erwähnt, es spielt für Corgi keine Rolle, ob man seinen Player-Character aus dem Baked Prefab erstellt oder aus dem Spine Skeleton. Man muss nur ein paar wichtige Dinge beachten. Und diese folgen jetzt.
Player Prefab für Corgi erstellen
Corgi Engine
Die Corgi Engine ist ein Toolkit für Unity, welches viele grundlegenden Funktionen zum Erstellen eines 2D- oder 2,5D-Platformers bereitstellt. Es eignet sich als Startpunkt für die Entwicklung eines Plattform-Spiels und lässt sich nach belieben erweitern.
Die Corgi Engine erwartet als „Playable Character“ ein spezielles Prefab. Dieses wird dem Corgi Level Manager zugeordnet und muss einen speziellen Aufbau haben. Die Dokumentation schreibt bei der Verwendung eines Spine Skeletons folgendes:
„You should nest your Spine object under the top level of your character (which should be an empty gameobject with just the colliders, CorgiController, Character and CharacterAbilities…). You can look at the NativeSpineCorgi example character for reference, located in Demos/Corgi2D/Spine/NativeSpineCorgi.“
Dazu machen wir folgendes:
- Wir ziehen das Skeleton Asset in die Szene und wählen „Skeleton Animator“ im aufpopenden Menü aus. Dadurch wird ein GameObject mit dem Namen „Spine Mecanim GameObject“ erzeugt, das die Animator Components enthält.
- Wir erstellen ein „Empty Object“. Dieses können wir umbenennen in z.B. „Player“ oder „Hero“ oder ähnliches.
- Wir ziehen das Spine Mecanim GameObject in das EmptyObject. Es ist nun ein Kind von EmptyObject.
- Dem EmptyObject fügen wir nun alle Corgi-Components hinzu, die ein Player Prefab benötigt (z.B. Rigidbody2D, BoxCollider 2D, Corgi Controller, Character, Character Movements, etc.)
- Die Character Component erwartet 2 Gameobjekte: Character Animator und Character Model.
- Dem Character Animator ordnen wir das Spine Mecanim GameObject zu.
- Dem Character Model ordnen wir ebenfalls das Spine Mecanim GameObject zu.
- Das EmptyObject, dem wir einen besseren Namen gegeben haben, ziehen wir nun in einen Ordner unseres Projekts, um daraus ein neues Prefab zu erstellen. Dieses ist das Player Prefab, welches dem Level Manager zugeordnet wird.
So sieht das dann im Hierarchie-Fenster aus.
Fallstrick:
Ganz wichtig: Auf dem Eltern-Objekt muss der Tag „Player“ gesetzt sein. Sonst wird das GameObject von der Corgi Engine nicht als Player behandelt. Und als Layer verwenden wir ebenfalls „Player“.
So, jetzt müsste der Charakter bereits auf unsere Eingaben reagieren und sich bewegen. Es fehlt allerdings noch der Animation Controller, der die Animationen zu unseren Bewegungen steuert. Wie man den zum Laufen bekommt, beschreibe ich im nächsten Artikel.
Bis dahin hoffe ich wie immer, diese erstbesten Lösungen waren hilfreich.
Zum zweiten Teil der Artikel-Serie >>
Links & Quellen:
- Spine Animation Software
- Spine Runtime – Dokumentation und Download
- Corgi Engine
- Corgi Engine Dokumentation
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen