Animationen Reloaded: mit Skripten Animationen ansteuern

Sign in to queue

Description

(Hinweis: dieser Post arbeitet mit den Dingen, die wir hier gelernt haben - lasst euch also nicht von den Animationsnamen verwirren. Ihr könnt aber natürlich nochmal ein, zwei Kapitel zurückgehen und euch noch einmal mit dem Erstellen von Animationen selbst befassen :).

Ihr kennt das ja aus zahlreichen Spielen - ihr drückt irgendeinen Button auf eurem Controller, berührt den Bildschirm eures Telefons oder was auch immer - und eure Spielfigur ändert ihre aktuelle Aktion. Oder - erst recht - wenn ihr nichts macht und über irgendeinen Gegenstand stolpert, in den Abgrund fallt oder oder oder.

Sowas solls ja geben, speziellen in Runner-Spielen.

Es gibt jedenfalls genügend Gründe, sich damit zu befassen, wie ich die abgespielten Animationen in Abhängigkeit von Spiel-Events (Button gedrückt, Kollision, Trigger ausgelöst...) ändern kann.

Die Ausgangssituation in meinem Drachenspiel ist erst einmal, dass ich zwei Animationsdefinitionen habe - einmal für den "toten" Drachen und dann für den fliegenden Drachen. Erstere ist als Standard eingestellt.

Dazu habe ich noch einen Parameter des Typs "Trigger", nämlich "isAlive".

Für dieses Tutorial mache ich zwei Dinge: Zu Beginn er Initialisierung lasse ich den Drachen fliegen, bei Mausklick soll er "tot" sein.

Das lässt sich aber auch im Fall von anderen Events analog verwenden, zum Beispiel wenn ich gegen ein Hindernis laufe.

Aber fangen wir an.

Mein Animator "Dragon" sieht derzeit so aus:

Generic Episode Image

Ich habe für den Drachen ein neues C#-Skript angelegt ("DragonAnimationControl") und es ihm gleich als Komponente zugewiesen.

Im Skript muss ich jetzt erst einmal auf die Animator-Komponente, aber auch auf den isAlive-Trigger zugreifen können.

Direkt unter "public class DragonAnimationControl : MonoBehavior {" schreibt ihr folgende Zeilen:

Animator dragonAnim;
int aliveHash;

dragonAnim ist der Zugriffspunkt um mit der Animator-Komponente zu arbeiten. Die Variable aliveHash haben wir angelegt, um den Parameter zu finden.

Und das tun wir jetzt auch in der Start()-Methode:

void Start(){
dragonAnim = this.gameObject.GetComponent<Animator>();
aliveHash = Animator.StringToHash("isAlive");
}

Diese beiden Zeilen bewirken, dass einerseits dragonAnim jetzt auch auf den korrekten Animator verweist, nämlich die Animator-Komponente eures Drachen. Also meines Drachen jetzt gerade ;). Andererseits bekommt aliveHash nunmehr den Wert, der den Namen "isAlive" repräsentiert. Hash könnt ihr euch vereinfacht als Prüfsumme vorstellen - eine Identifikationsmöglichkeit, ohne zu viel über den eigentlichen Inhalt preiszugeben.

Viel mehr braucht ihr dazu nicht einmal, denn jetzt könnt ihr die Start-Methode um folgende Zeile ergänzen (am Ende, direkt vor der geschweiften, schließenden Klammer }).

dragonAnim.SetTrigger(aliveHash);

Hier geht ihr direkt auf die Animator-Komponente des Drachen und sprecht den Trigger mit dem Hashwert aliveHash an.

Spielt jetzt mal die Szene ab, ihr werdet sehen, dass der Drache bei Spielstart die Animation wechselt.

Um die Animation immer wieder per Klick zu Wechseln, geht jetzt mal in die Update-Methode:

void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            dragonAnim.SetTrigger(aliveHash);
        }  
    
}

 

Das wars schon - jetzt wechselt der Drache bei jedem Klick die Animation. Einfach, oder?

The Discussion

Add Your 2 Cents