Wie ich aus einer Spine Animation einen Player Character für die Corgie Engine in Unity erstelle – Teil 2

Wir schauen uns an, wie man aus einer Spine-Animation einen Player-Character für die Corgi Engine macht. Im zweiten Teil geht es um den Unity Animation Controller. Wieder mit Fallstricken.

Worum geht es hier?

Im ersten Teil dieser Artikel-Serie ging es darum, wie man eine Charakter-Animation aus der 2D-Animatons-Software Spine exportiert, in die Unity-Engine importiert und daraus einen Prefab für die Corgi-Engine erstellt.
Nun wollen wir, das die Animationen auch abgespielt werden, wenn sie das sollen. Beim Laufen und Springen zum Beispiel. Dazu benötigen wir einen Unity Animation Controller. Was wir dabei alles beachten müssen, damit der Controller zusammen mit der Corgi-Engine funktioniert, wird in den folgenden Absätzen beschrieben.

Animation Controller für den Corgi Player Prefab

In der Corgi Dokumentation steht, dass man im Animation Controller einfach die benötigten Parameter anlegt, die Animation-Clips hineinzieht und die Transitions erstellt. Es wird empfohlen, den RectangleAnimator aus den mitgelieferten Beispielen zu als Template zu benutzen. Der Animator Controller des NativeSpineCorgi-Beispiel macht das genau so.

Es wäre zu schön gewesen … . So einfach funktioniert das dann aber doch nicht. Die Animationen werden meist nicht komplett abgespielt. Sie brechen vorher ab. Egal ob Idle, Run, Jump … .
Das kann dann so aussehen. Man sieht hier im Beispiel, dass die Idle- und die Run-Animationen mitten im Ablauf neu geloopt wird.

Und das ist jetzt genau die Stelle, an der ich die meiste Zeit verbrannt habe.

Fallstrick: 

Das Erstellen eines passenden Animation Controllers, der von der Corgi-Engine korrekt interpretiert wird und alle Animationen flüssig abspielt, ist nicht ganz so leicht gebaut, wie in der Corgi-Dokumentation beschrieben ist.
Besonders die Übergänge zwischen den Animationsphasen können hier zu Problemen führen. Im schlechtesten Fall müssen alle Übergänge zwischen den Zuständen von Hand angepasst werden.

Warum brechen die Animationen mitten im Ablauf ab?

Es liegt an den Transitions bzw. der Transition Duration, also den Übergängen der Animationen. Sind die Übergänge zwischen zwei Zuständen nicht passend aufeinander abgestimmt, hackt die Animation.
In folgendem Bild ist zu sehen, dass der automatisch angelegte Übergang zwischen Idle und Run nicht optimal aussieht für die Animation von oben. Die Überlagerung zwischen den Zuständen ist zu groß.

Die Transition Duration müsste geringer eingestellt werden. So wie in folgendem Bild zu sehen ist.

Und plötzlich passt die Animation.
Natürlich müssen auf diese Art alle Transitions manuell angepasst werden.
Schon bei einem Charakter mit den grundlegenden Animationen Idle, Walk, Run, Jump, Shoot sind das eine Menge Zustandswechsel.
Nichts, was man mal eben in 5 Minuten macht.

 

Alle Übergänge der Animationen von Hand anpassen? Puh … Gibt es keine Alternativen?

Jein.
Es gibt eine Alternative, sie ist aber nicht viel weniger aufwendig.
Durch Zufall habe ich in der alten Version von Corgi (3.x) einen Animation Controller gefunden, der die Übergänge der Animationsphasen per Blend Trees umsetzt.

Alternative: Transition per Blend Tree

Man gruppiert damit ein paar der Transitions zwischen Zuständen, die zusammengehören, in dem man die Übergänge anhand eines Parameters überblendet. Man erstellt also z.B. einen BlendTree für „GroundMoving“, also die Bewegungen am Boden.

Dort packt man die Animationen für „idle“ und „run“ (und „walk“, wenn benötigt) hinein. Als Parameter wird hier „Speed“ gewählt. Der Threshold-Wert der Motion gibt dann an, ab welchem Speed-Wert die Überblendung stattfinden soll.
Im Beispiel: Ab einem Speed-Wert von 1 soll gerannt werden.

Und siehe da … es läuft.

Mit allen Charakteren. Egal ob Skeleton oder per Baking.

Jetzt kann man hier weitere Blend Trees anlegen, z.B. für Springen und Fallen oder für Schleichen.
Die anderen Transitions zwischen Zuständen, die sich nicht per Blend Tree realisieren lassen, muss man dann aber doch wieder manuell anpassen.

Hier mal die Final State Machine des kompletten Animation Controller aus der alten Corgi-Version.

Auch ordentlich Arbeit.

Fazit

Es gibt viele Fallen. Es gibt viel zu beachten. Es ist fummelig. Es ist aufwendig. Besonders das Erstellen des Animation Controllers und das manuelle Anpassen der Transitions, bis alle Bewegungen flüssig aussehen. Aber da muss man eben durch.
Man macht das ja meist nur einmal für den Player Character. Animation Controller für einfachere Spielelemente (z.B. Gegner oder Items) mit wenigen Bewegungszuständen oder einfachen Sprite-Animationen sind bedeutend weniger aufwendig zu erstellen.

Ich hoffe wie immer, diese Lösungen waren hilfreich.

<< Zum ersten Teil der Artikelserie


Links & Quellen:


 

Wie ich aus einer Spine Animation einen Player Character für die Corgie Engine in Unity erstelle – Teil 1

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert