2D-Animationen in Unity

in #games4 years ago (edited)

Gehe in den Scenenbildschirm und wähle deinen Spieler. Öffne das Animationsfenster. Um mit der Animation beginnen zu können, benötigst du einen Animator und einen Animation Clip.

Wähle die Player aus und gehe unter Window auf Animation -->Animation

Du benötigst einen Animator und einen Animation Clip.

Wähle Create, erstelle einen Ordner für Animationen und Speichere die Animation unter Player_Idle.

Es erscheint die Zeitleiste, in der die Animationssprites positioniert werden können.

Ziehe die Sprites zur Animation, ins Animationsfenster. Die Frames werden hinzugefügt:

Jetzt würde die Spielfigur viel zu schnell animiert. Es ist nötig die Bilder, die pro Sekunde abgespielt werden, anzupassen.

Um die Sample Rate anzeigen zu lassen, wähle die Einstellungen vom Animationsfenster und wähle "Show Sample Rate"

Diese steht jetzt auf 60.

Ändere sie auf 12.



Dann läuft die Animation nicht mehr ganz so schnell ab.

Die Bilder lassen sich per Drag & Drop auf der Zeitleiste verschieben oder mit Entf. entfernen.

Das Ganze funktioniert auch für andere Animationen, wie zum Beispiel das Laufen vom Charakter.

Wähle dafür: Create New Clip

Wiederhole dies fürs Ducken und fürs Springen.

Wenn du beim Springen nicht so viele Sprites besitzt und beispielsweise nur 2 Sprites hast, kannst du den Samples-Wert auf 2 setzen.

Im Animationsordner hat der Animator Controller einer andere Icon-Darstellung als die Animationen:

Er bestimmt, wann welche Animation abgespielt wird.

Mit einem Doppelklick öffnet sich der Animator:

Dort wird bestimmt, welche Animation abgespielt wird. Aus dem Projekt lässt sich per Drag & Drop direkt eine Animation in den Animator ziehen.

Player_Idle ist mit einem orangen Pfeil verbunden und orange markiert, weil es die Ausgangsanimation ist. Wenn man das Spiel startet, wird ständig die "Idle-Animation" abgespielt. Mit der rechten Maustaste kannst du "Set as Layer Default State" auswählen und damit eine andere Animation zur Ausgangsanimation machen.

Wenn du anfängst zu rennen, sollte die Animation zur entsprechenden Animation wechseln. Wähle Player_Idle mit der rechten Maustaste und wähle Make Transition. Damit erstellst du eine Verbindung von Player_Idle zu Player_Run.

Wählst du die Verbindung, kannst du bearbeiten, wann die Veränderung von einer zur anderen Animation stattfinden soll.

Dafür benötigst du eine Bedingung. Damit das funktioniert, brauchst du außerdem einen Parameter.

Erstelle einen "float".

Er repräsentiert die Geschwindigkeit des Spielers.

Anschließend fügst du die Bedingung ein:

Du legst beispielsweise fest, das die Animation wechselt, wenn die Geschwindigkeit größer als 0.01 ist:

Wenn die Spielfigur sich bewegt, startet sie mit der anderen Animation.

Deaktiviere "Has Exit Time".

Ändere die Transition Duration auf 0.

Die Animation vom Rennen soll beendet werden, wenn die Figur aufhört zu laufen. Erstelle eine weitere Transition, die zu Idle zurückgeht.

Wähle hier die Bedingung, dass die Animation wechselt, wenn die Geschwindigkeit kleiner als 0.01 ist.

Auch hier deaktiviere "Has Exit Time" und setze die Transition-Dauer auf 0.

Die Änderungen jetzt, werden im Script vorgenommen:

Wir haben bei einem Charakter 2 Scripts: Der CharacterController kümmert sich um die Physik, die den Charakter bewegt und das PlayerMovement-Script, das sagt, wann die Figur sich bewegt und mit welcher Geschwindigkeit.

Öffne zuerst das PlayerMovement-Script. Zuerst wollen wir Zugriff auf den Animator haben:

Unity fügt beim Erstellen einer Animation den Animator zum Spieler hinzu. Er bezieht sich auf den Animator Controller, der wiederum den Bezug zum Spieler herstellt. Der Animator muss duch das PlayerMovement Script kontrollierbar sein:

public Animator animator;

Gehe zurück in Unity und du siehst, das jetzt im Player Movement Script das Animator-Feld erscheint. Dort wird dann die Animator-Komponente aus dem Inspectorfenster hineingezogen.

Jedesmal wenn im Script Animator geschrieben wird, greifen wir auf die Animatorkomponente zu.

In der Updatefunktion greifst du jetzt auf den Animator und die dazugehörige Komponente zu:

animator.SetFloat("Speed", Mathf.Abs(horizontalMove);

Die Funktion Mathf.Abs sorgt dafür, das der Wert der Bewegung deines Charakters immer positiv ist.

Wenn du jetzt dein Spiel in Unity startest, spielt Unity beim Laufen die Animation deines Charakters ab. Wenn du anhältst, ist die Idle-Animation aktiviert.

Jetzt geht es um das Springen: Dafür nutzen wir die Möglichkeit von "Any State" im Animator. Egal welche Animation gerade abgespielt wird, wenn der Charakter springt, wechselt er zu dieser Animation.

Dafür wird eine Bedingung benötigt, damit der Charakter nicht die ganze Zeit hüpft: Jetzt wird ein weiterer Parameter gebraucht.

Nenne diesen: IsJumping und setze als Bedingung "IsJumping" auf true.

Wir wollen keine Exit Time und setzen die Transition-Dauer auf 0.

Der Charakter soll von der Animation zum Springen wieder zum "Idle" zurückkönnen. Es wird eine weitere Verbindung erstellt.

Die Bedingung "IsJumping" wird auf false gesetzt und Speed auf Less 0.01.

Eine weitere Verbindung wird von Jump zu Run erstellt. Der Wechsel zum Laufen bekommt weitere Bedingungen:

IsJumping = false und Speed >0.01

Bei beiden setzten wir die HasExit-Time auf false und die Duration auf 0.

Jetzt wird das Script für die Animationen angepasst:

animator.SetBool("IsJumping", true);

Wir vermitteln dem PlayerMovementScript, das der Charakter aufhört mit springen, wenn er landet:

public void OnLanding ()

{

animator.SetBool("IsJumping", false);

}

Jetzt können wir in Unity ein neues OnLandEvent hinzufügen:

Du fügst ein OnLandEvent ein und wählst unter PlayerMovement: OnLanding()

Dann spielt Unity beim Springen die Sprunganimation ab und wenn der Charakter landet, beendet es sie.

Unity spielt die Animation immer sehr kurz ab. Deaktiviere "Can Transition to Self", damit die Animation komplett abgespielt wird:

Jetzt wird die Animation fürs Ducken hinzugefügt.

Stelle eine Verbindung von Idle zu Crouch her:

Füge ein Bedingung hinzu: Erstelle einen neuen Paramter: IsCrouching

Wenn Crouching IsTrue, dann soll die Figur sich ducken:

Bearbeite wieder die ExitTime und die Dauer. Stelle wieder eine Rückverbindung her.

Wenn du die Exit Time deaktivierst und die Dauer für die Animation auf 0 setzt, verlängere die Exit Time zuerst und deaktivere sie erst danach, da sonst jede Menge Warnungen in die Konsole wandern. Erstelle eine weitere Verbindung von der Run-Animation.

Ertstelle eine weitere Rückverbindung:

IsCrouching ist false und Speed > 0.01

Füge noch ein OnCrouchEvent hinzu.

Dafür benötigen wir eine weitere Funktion im PlayerMovement-Script:

public void OnCrouching (bool isCrouching)

{

animator.SetBook("IsCrouching", isCrouching);

}

Füge jetzt das CrouchEvent hinzu. Wichitg: Im Script muss vor dem public class BoolEvent [System.Serializable] stehen. Ansonsten erscheint das CrouchEvent nicht im Inspectorfenster von Unity:

Füge wieder das PlayerMovement Script hinzu. Wähle unter dem PlayerMovement Script das OnCrouching aus dem oberen Abschnitt.



Posted from my blog with SteemPress : https://games-und-lyrik.de/2d-animationen-in-unity/