Unity Mecanim Animatie afspelen bij toetsaanslag

Mecanim is een statusgestuurde tool voor Unity die ontwikkelaars geavanceerde animatiecontrole en een feature-rijke editor geeft.

Opvallende kenmerken van Mecanim zijn het combineren van animaties en het retargeten van animaties.

Animatieovervloeiing is een automatisch proces waarbij vloeiende overgangen tussen animaties worden gemaakt.

Animatie retargeting is een proces waarbij bestaande animaties opnieuw worden gebruikt om te werken tussen meerdere personage-installaties, waardoor het niet meer nodig is om voor elk nieuw personage nieuwe animaties te maken.

In deze tutorial laat ik zien hoe je een kubus kunt animeren en de animatie kunt afspelen bij toetsaanslag met Mecanim.

Stappen

Volg de onderstaande stappen om een ​​kubus in Unity te animeren:

  • Maak een nieuwe kubus (GameObject -> 3D-object -> Kubus)

  • Selecteer Kubus en open vervolgens het animatievenster (Venster -> Animatie -> Animatie)
  • Klik in het animatievenster op "Create", waardoor een nieuwe animatie, een nieuwe Animator Controller, wordt gemaakt en een Animator-component aan de kubus wordt gekoppeld.
  • Geef de nieuwe animatie een naam "SpinAnimation"

  • Klik in het animatievenster op AddProperty -> Transformeren -> Rotatie
  • Deze animatie heeft 2 frames, begin en einde.
  • Voor het eerste frame stellen we de rotatie in op (0, 0, 0)

  • Voor het laatste frame stellen we de rotatie in op (0, 360, 0)

De animatie is klaar.

Tip: Om meer animaties te maken, klikt u eenvoudig op de naam van de animatie in het animatievenster en klikt u vervolgens op "Create new Clip...".

Volg de onderstaande stappen om Mecanim Animator Controller in te stellen:

  • Dubbelklik op het Animator Controller-item dat met de animatie is gemaakt

  • Er verschijnt een nieuw venster met de naam "Animator", dat er ongeveer zo uit zou moeten zien:

  • Je zult merken dat er een pijl is die wijst van de "Entry" naar de "SpinAnimation", wat betekent dat de animatie wordt afgespeeld zodra de scène begint, maar dat is niet wat we willen, we willen alleen de animatie bij toetsaanslag.

Omdat Mecanim een ​​invoeranimatie nodig heeft, kunnen we een nieuwe lege status creëren en er een invoer van maken:

  • Klik met de rechtermuisknop op het Animator-venster -> Staat maken -> Leeg:

  • Selecteer Ingangsstatus -> Klik er met de rechtermuisknop op -> Stel de standaardstatus van StateMachine in en wijs vervolgens naar "New State":

Het laatste wat we nog moeten doen is een overstap maken naar SpinAnimation, maar we willen de overstap pas doen als aan de specifieke voorwaarde is voldaan. Dan komt het tabblad Parameters op zijn plaats:

  • Klik op het tabblad Parameters in het Animator-venster en klik vervolgens op het (+) symbool:

Je zult merken dat er meerdere typen beschikbaar zijn, maar voorlopig selecteren we Trigger. Het lijkt op bool, maar in tegenstelling tot bool wordt het automatisch op false ingesteld zodra de animatie is voltooid, handig voor eenmalige animaties:

  • Geef de parameter een naam "spinTrigger"

  • Selecteer ten slotte "Any State" -> Klik er met de rechtermuisknop op -> Overgang maken en wijs vervolgens naar SpinAnimation:

  • Klik op de overgangspijl en klik in Inspector View onder Voorwaarden op (+) en zorg ervoor dat de parameter spinTrigger is geselecteerd

  • Standaard is voor animaties gemaakt met Unity lus ingeschakeld, maar omdat we de animatie maar één keer willen afspelen, hoeven we alleen maar het animatiefragment in de projectweergave te selecteren en vervolgens het selectievakje Loop Time uit te schakelen:

Om Mecanim-parameters vanuit een script te kunnen besturen, zullen we speciale functies moeten gebruiken, controleer de onderstaande code:

  • Maak een nieuw script, noem het "AnimationTest", verwijder alles eruit en plak de onderstaande code erin:

AnimatieTest.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");
        }
    }
}
  • Voeg AnimationTest.cs-script toe aan Cube met Animator-component:

Laten we het nu testen:

Sharp Coder Video speler

Alles werkt zoals verwacht, door op Q te drukken wordt de animatie afgespeeld.

Voorgestelde artikelen
Een interactief menusysteem in eenheid bouwen
Het belang van storytelling bij de ontwikkeling van Unity-games
Unity Cinemachine en tijdlijn-tutorial
Animaties importeren naar Unity
Kies in eenheid de juiste Skybox voor uw omgeving
Strategieën om Unity Games te beschermen tegen piraterij
Hoe je een FNAF-geïnspireerd spel in Unity maakt