Unity Mecanim So spielen Sie Animationen auf Tastendruck ab

Mecanim ist ein zustandsgesteuertes Tool für Unity, das Entwicklern erweiterte Animationssteuerung und einen funktionsreichen Editor bietet.

Herausragende Funktionen von Mecanim sind Animation Blending und Animation Retargeting.

Beim Mischen von Animationen handelt es sich um einen automatischen Prozess, der sanfte Übergänge zwischen Animationen ermöglicht.

Beim Animations-Retargeting handelt es sich um einen Prozess, bei dem vorhandene Animationen für die Verwendung zwischen mehreren Charakter-Rigs umgenutzt werden, wodurch die Notwendigkeit entfällt, für jeden neuen Charakter neue Animationen zu erstellen.

In diesem Tutorial zeige ich, wie man mit Mecanim einen Würfel animiert und die Animation auf Tastendruck abspielt.

Schritte

Um einen Würfel in Unity zu animieren, führen Sie die folgenden Schritte aus:

  • Neuen Würfel erstellen (GameObject -> 3D-Objekt -> Würfel)

  • Wählen Sie Cube aus und öffnen Sie dann das Animationsfenster (Fenster -> Animation -> Animation).
  • Klicken Sie im Animationsfenster auf "Create", um eine neue Animation und einen neuen Animator-Controller zu erstellen und dem Cube eine Animator-Komponente hinzuzufügen.
  • Benennen Sie die neue Animation "SpinAnimation"

  • Klicken Sie im Animationsfenster auf AddProperty -> Transform -> Rotation
  • Diese Animation besteht aus 2 Frames, Start und Ende.
  • Für den ersten Frame stellen wir die Drehung auf (0, 0, 0) ein.

  • Für den letzten Frame stellen wir die Drehung auf (0, 360, 0) ein.

Die Animation ist fertig.

Tipp: Um weitere Animationen zu erstellen, klicken Sie einfach auf den Animationsnamen im Animationsfenster und dann auf "Create new Clip...".

Um Mecanim Animator Controller einzurichten, führen Sie die folgenden Schritte aus:

  • Doppelklicken Sie auf das Animator Controller-Asset, das mit der Animation erstellt wurde

  • Es erscheint ein neues Fenster mit dem Titel "Animator", das etwa so aussehen sollte:

  • Sie werden feststellen, dass ein Pfeil von "Entry" zu "SpinAnimation" zeigt, was bedeutet, dass die Animation abgespielt wird, sobald die Szene startet, aber das ist nicht das, was wir wollen, wir wollen die Animation nur auf Tastendruck abspielen.

Da Mecanim eine Eintrittsanimation benötigt, können wir einen neuen Leerzustand erstellen und daraus einen Eintrag machen:

  • Klicken Sie mit der rechten Maustaste auf das Animator-Fenster -> Status erstellen -> Leeren:

  • Wählen Sie „Eintragsstatus“ -> Rechtsklick darauf -> „StateMachine-Standardstatus festlegen“ und zeigen Sie dann auf "New State":

Als letztes muss noch ein Übergang zu SpinAnimation vorgenommen werden. Wir möchten den Übergang jedoch erst dann durchführen, wenn die spezifische Bedingung erfüllt ist. Dann kommt die Registerkarte „Parameter“ ins Spiel:

  • Klicken Sie im Animator-Fenster auf die Registerkarte „Parameter“ und dann auf das (+)-Symbol:

Sie werden feststellen, dass mehrere Typen verfügbar sind, aber zunächst wählen wir Trigger aus. Es ähnelt bool, wird aber im Gegensatz zu bool automatisch auf false gesetzt, sobald die Animation abgeschlossen ist, was für One-Shot-Animationen nützlich ist:

  • Benennen Sie den Parameter "spinTrigger"

  • Wählen Sie zuletzt "Any State" -> Rechtsklick darauf -> Übergang erstellen und zeigen Sie dann auf SpinAnimation:

  • Klicken Sie auf den Übergangspfeil und klicken Sie in der Inspektoransicht unter Bedingungen auf (+) und stellen Sie sicher, dass der Parameter spinTrigger ausgewählt ist

  • Standardmäßig ist bei Animationen, die mit Unity erstellt wurden, die Schleife aktiviert, aber da wir die Animation nur einmal abspielen möchten, müssen wir nur den Animationsclip in der Projektansicht auswählen und dann das Kontrollkästchen „Loop-Zeit“ deaktivieren:

Um Mecanim-Parameter über ein Skript steuern zu können, müssen wir spezielle Funktionen verwenden. Überprüfen Sie den folgenden Code:

  • Erstellen Sie ein neues Skript, nennen Sie es "AnimationTest", entfernen Sie alles daraus und fügen Sie dann den folgenden Code ein:

AnimationTest.cs

using UnityEngine;

public class AnimationTest : MonoBehaviour
{

    Animator animator;

    // Start is called before the first frame update
    void Start()
    {
        //Get Animator component
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        //Play spin animation on key press
        if (Input.GetKeyDown(KeyCode.Q))
        {
            animator.SetTrigger("spinTrigger");
        }
    }
}
  • Hängen Sie das AnimationTest.cs-Skript mit der Animator-Komponente an den Cube an:

Jetzt testen wir es:

Sharp Coder Videoplayer

Alles funktioniert wie erwartet. Durch Drücken von Q wird die Animation abgespielt.