Unity 3D Game Engine – Animator Scripting

Animator class brings to life your characters!

Think about that:

1. Hierarchy> select your character> Inspector
– Transform
– Animator Component
— Animator Controller (animations scripts)
— Animator Avatar (rig informations)
– YourCharacterScript.JS

2. Open — Animator Controller> Animator Window> Animation Clips

Idle <-> Walk <-> Run <-> Jump

Parameters: Speed |float value|
Jump |trigger (checkbox – innesco)|

NOTICE: the character will jump ONLY if it is running
Il personaggio può saltare solamente se stà correndo

3. YourCharacterScript.JS


#pragma strict

var anim : Animator; // creo una variabile per richiamare la classe Animator

// conversione in Hash, Hash è un valore intero univoco che rappresenta una specifica stringa
// ottiene il parametro Jump e lo converte in Hash
var jumpHash : int = Animator.StringToHash("Jump"); 
// ottiene dal layer Base, Run e lo converte in Hash. Specifico anche il Layer di appartenenza perchè potrebbe esistere su un'altro layer una clip di animazione Run
var runStateHash : int = Animator.StringToHash("Base Layer.Run"); 


function Start () 
{
    anim = GetComponent("Animator"); // ottiene Animator Controller attaccato all'oggetto
}


function Update () 
{
    var move : float = Input.GetAxis ("Vertical"); // rileva i dati di input utente, questo valore va da -1 a 1
    anim.SetFloat("Speed", move); // il valore rilevato da Input.GetAxis viene assegnato a Speed di Animator Controller
                                  // con l'aumentare di speed lo stato passerà da Statico a Camminata a Corsa

    // ottiene le info di stato dal layer di base, indicizzato 0 zero, capisce quale clip di animazione è attivo
    var stateInfo : AnimatorStateInfo = anim.GetCurrentAnimatorStateInfo(0); 
    
    // se viene premuto il tasto barra spazio AND lo stato corrente è la corsa...
    if(Input.GetKeyDown(KeyCode.Space) && stateInfo.nameHash == runStateHash)
    {
        // ... viene avviata l'animazione del salto
        // il personaggio potrà saltare solo se stà già correndo
        anim.SetTrigger (jumpHash);
    }
}