Unity Mecanim Come riprodurre l'animazione su Keypress

Mecanim è uno strumento guidato dallo stato per Unity che offre agli sviluppatori un controllo avanzato dell'animazione e un editor ricco di funzionalità.

Le caratteristiche di spicco di Mecanim sono il blending dell'animazione e il retargeting dell'animazione.

La fusione delle animazioni è un processo automatico per creare transizioni fluide tra le animazioni.

Il retargeting dell'animazione è un processo di riutilizzo di animazioni esistenti per funzionare tra più piattaforme di personaggi, eliminando la necessità di creare nuove animazioni per ogni nuovo personaggio.

In questo tutorial, mostrerò come animare un cubo e riprodurre l'animazione su Keypress con Mecanim.

Passi

Per animare un Cubo in Unity, procedi nel seguente modo:

  • Crea nuovo cubo (GameObject -> Oggetto 3D -> Cubo)

  • Seleziona Cubo quindi apri la finestra Animazione (Finestra -> Animazione -> Animazione)
  • Nella finestra Animazione fai clic su "Create", che creerà una nuova animazione, un nuovo Animator Controller e collegherà un componente Animator al Cubo.
  • Dai un nome alla nuova animazione "SpinAnimation"

  • Nella finestra di animazione fare clic su Aggiungi proprietà -> Trasforma -> Rotazione
  • Questa animazione avrà 2 fotogrammi, inizio e fine.
  • Per il primo fotogramma, impostiamo la rotazione su (0, 0, 0)

  • Per l'ultimo fotogramma, impostiamo la rotazione su (0, 360, 0)

L'animazione è pronta.

Suggerimento: per creare più animazioni, fai semplicemente clic sul nome dell'animazione nella finestra Animazione, quindi fai clic su "Create new Clip...".

Per configurare Mecanim Animator Controller, procedi nel seguente modo:

  • Fai doppio clic sull'asset Animator Controller che è stato creato con l'animazione

  • Apparirà una nuova finestra intitolata "Animator", che dovrebbe assomigliare a questa:

  • Noterai che c'è una freccia che punta da "Entry" a "SpinAnimation", il che significa che l'animazione verrà riprodotta non appena inizia la scena, ma non è quello che vogliamo, vogliamo per riprodurre l'animazione solo alla pressione di un tasto.

Poiché Mecanim richiede di avere un'animazione di ingresso, ciò che possiamo fare è creare un nuovo stato Vuoto e renderlo un Ingresso:

  • Fare clic con il tasto destro sulla finestra di Animator -> Crea stato -> Vuoto:

  • Seleziona lo stato di ingresso -> fai clic destro su di esso -> Imposta stato predefinito di StateMachine, quindi punta a "New State":

L'ultima cosa che resta da fare è effettuare una transizione a SpinAnimation, ma vogliamo eseguire la transizione solo una volta soddisfatta la condizione specifica, ovvero quando entra in vigore la scheda Parametri:

  • Fare clic sulla scheda Parametri nella finestra di Animator, quindi fare clic sul simbolo (+):

Noterai che sono disponibili più tipi, ma per ora selezioneremo Trigger, è simile a bool ma a differenza di bool, viene impostato automaticamente su false una volta che l'animazione è completato, utile per le animazioni one-shot:

  • Assegna un nome al parametro "spinTrigger"

  • Infine seleziona "Any State" -> Fai clic destro su di esso -> Crea transizione, quindi punta su SpinAnimation:

  • Fare clic sulla freccia di transizione e in Inspector View in Condizioni fare clic su (+) e assicurarsi che il parametro spinTrigger sia selezionato

  • Per impostazione predefinita, le animazioni create con Unity hanno il loop abilitato, ma poiché vogliamo riprodurre l'animazione solo una volta, ciò che dobbiamo fare è selezionare la clip di animazione nella vista progetto e quindi deselezionare la casella di controllo Tempo di loop:

Per poter controllare i parametri di Mecanim da uno script, avremo bisogno di utilizzare funzioni speciali, controlla il codice qui sotto:

  • Crea un nuovo script, chiamalo "AnimationTest", rimuovi tutto da esso quindi incolla il codice qui sotto al suo interno:

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");
        }
    }
}
  • Collega lo script AnimationTest.cs a Cube con il componente Animator:

Ora proviamolo:

Sharp Coder Lettore video

Tutto funziona come previsto, premendo Q viene riprodotta l'animazione.