unity3d
Unity Animation
Ricerca…
Animazione di base per l'esecuzione
Questo codice mostra un semplice esempio di animazione in Unity.
Per questo esempio, dovresti avere 2 clip di animazione; Corri e pigia. Quelle animazioni dovrebbero essere movimenti Stand-in-Place. Una volta selezionate le clip di animazione, crea un controller di animazione. Aggiungi questo controller al giocatore o all'oggetto di gioco che desideri animare.
Apri la finestra Animator dall'opzione Windows. Trascina le 2 clip di animazione nella finestra di Animator e verranno creati 2 stati. Una volta creato, usa la scheda dei parametri di sinistra per aggiungere 2 parametri, entrambi come bool. Chiamane uno come "PerformRun" e altri come "PerformIdle". Impostare "PerformIdle" su true.
Effettua le transizioni dallo stato inattivo a Esegui e Esegui inattivo (fare riferimento all'immagine). Fare clic su Inattività-> Esegui transizione e nella finestra Impostazioni, deselezionare HasExit. Fai lo stesso per l'altra transizione. Per Inattività-> Esegui transizione, aggiungi una condizione: PerformIdle. Per Esegui-> In attesa, aggiungi una condizione: Esegui. Aggiungi lo script C # indicato di seguito all'oggetto del gioco. Dovrebbe essere eseguito con l'animazione usando il pulsante Su e ruotando con i pulsanti Sinistra e Destra.
using UnityEngine;
using System.Collections;
public class RootMotion : MonoBehaviour {
//Public Variables
[Header("Transform Variables")]
public float RunSpeed = 0.1f;
public float TurnSpeed = 6.0f;
Animator animator;
void Start()
{
/**
* Initialize the animator that is attached on the current game object i.e. on which you will attach this script.
*/
animator = GetComponent<Animator>();
}
void Update()
{
/**
* The Update() function will get the bool parameters from the animator state machine and set the values provided by the user.
* Here, I have only added animation for Run and Idle. When the Up key is pressed, Run animation is played. When we let go, Idle is played.
*/
if (Input.GetKey (KeyCode.UpArrow)) {
animator.SetBool ("PerformRun", true);
animator.SetBool ("PerformIdle", false);
} else {
animator.SetBool ("PerformRun", false);
animator.SetBool ("PerformIdle", true);
}
}
void OnAnimatorMove()
{
/**
* OnAnimatorMove() function will shadow the "Apply Root Motion" on the animator. Your game objects psoition will now be determined
* using this fucntion.
*/
if (Input.GetKey (KeyCode.UpArrow)){
transform.Translate (Vector3.forward * RunSpeed);
if (Input.GetKey (KeyCode.RightArrow)) {
transform.Rotate (Vector3.up * Time.deltaTime * TurnSpeed);
}
else if (Input.GetKey (KeyCode.LeftArrow)) {
transform.Rotate (-Vector3.up * Time.deltaTime * TurnSpeed);
}
}
}
}
Creazione e utilizzo di clip di animazione
Questo esempio mostrerà come creare e utilizzare clip di animazione per oggetti di gioco o giocatori.
Nota, i modelli utilizzati in questo esempio sono scaricati da Unity Asset Store. Il lettore è stato scaricato dal seguente link: https://www.assetstore.unity3d.com/en/#!/content/21874 .
Per creare animazioni, devi prima aprire la finestra Animazione. Puoi aprirlo facendo clic su Finestra e Seleziona animazione o premere Ctrl + 6. Seleziona l'oggetto di gioco al quale desideri applicare la clip di animazione, dalla finestra Gerarchia, quindi fai clic sul pulsante Crea nella finestra Animazione.
Assegna un nome alla tua animazione (come IdlePlayer, SprintPlayer, DyingPlayer ecc.) E salvalo. Ora, dalla finestra di animazione, fare clic sul pulsante Aggiungi proprietà. Questo ti permetterà di cambiare la proprietà dell'oggetto o del giocatore rispetto al tempo. Questo può includere trance come la rotazione, la posizione e la scala e qualsiasi altra proprietà che è collegata all'oggetto di gioco, ad es. Collider, Mesh Renderer ecc.
Per creare un'animazione in esecuzione per l'oggetto del gioco, è necessario un modello umanoide 3D. È possibile scaricare il modello dal link precedente. Segui i passaggi precedenti per creare una nuova animazione. Aggiungi una proprietà Trasforma e seleziona Rotazione per una gamba del personaggio.
In questo momento, il tuo pulsante Play e i valori di rotazione nella proprietà dell'oggetto del gioco sarebbero diventati rossi. Fare clic sulla freccia a discesa per visualizzare i valori di rotazione X, Y e Z. Il tempo di animazione predefinito è impostato su 1 secondo. Le animazioni utilizzano fotogrammi chiave per interpolare tra valori. Per animare, aggiungi le chiavi in punti diversi nel tempo e modifica i valori di rotazione dalla finestra dell'Inspector. Ad esempio, il valore di rotazione al tempo 0.0s può essere 0.0. Al tempo 0.5s il valore può essere 20.0 per X. Al momento 1.0s il valore può essere 0.0. Possiamo terminare la nostra animazione a 1.0s.
La lunghezza dell'animazione dipende dalle ultime chiavi aggiunte all'animazione. È possibile aggiungere più chiavi per rendere l'interpolazione più fluida.
Animazione 2D Sprite
L'animazione Sprite consiste nel mostrare una sequenza esistente di immagini o fotogrammi.
Prima importa una sequenza di immagini nella cartella delle risorse. Crea alcune immagini da zero o scaricali da Asset Store. (Questo esempio utilizza questa risorsa gratuita .)
Trascina ogni singola immagine di una singola animazione dalla cartella delle risorse alla vista scena. Unity mostrerà una finestra di dialogo per nominare la nuova clip di animazione.
Questa è una scorciatoia utile per:
- creando nuovi oggetti di gioco
- assegnare due componenti (un Sprite Renderer e un Animator)
- creare controller di animazione (e collegarli a loro il nuovo componente Animator)
- creare clip di animazione con i fotogrammi selezionati
Anteprima della riproduzione nella scheda di animazione facendo clic su Riproduci:
Lo stesso metodo può essere utilizzato per creare nuove animazioni per lo stesso oggetto di gioco, quindi eliminare il nuovo oggetto di gioco e il controller di animazione. Aggiungi la nuova clip di animazione al controller di animazione di quell'oggetto nello stesso modo con l'animazione 3D.
Curve di animazione
Le curve di animazione ti consentono di modificare un parametro float durante la riproduzione dell'animazione. Ad esempio, se è presente un'animazione di lunghezza 60 secondi e si desidera un valore / parametro float, chiamarlo X, per variare l'animazione (come ad animazione = 0.0s; X = 0.0, ad animazione = 30.0s; X = 1.0, a tempo di animazione = 60.0s; X = 0.0).
Una volta ottenuto il valore float, puoi usarlo per tradurre, ruotare, ridimensionare o usarlo in qualsiasi altro modo.
Per il mio esempio, mostrerò un oggetto di gioco giocatore in esecuzione. Quando viene riprodotta l'animazione per la corsa, la velocità di traduzione del giocatore dovrebbe aumentare con l'avanzare dell'animazione. Quando l'animazione raggiunge la sua fine, la velocità di traduzione dovrebbe diminuire.
Ho creato una clip di animazione in esecuzione. Selezionare la clip e quindi nella finestra di ispezione, fare clic su Modifica.
Una volta lì, scorri verso il basso fino a Curves. Clicca sul segno + per aggiungere una curva. Assegna un nome alla curva, ad esempio ForwardRunCurve. Clicca sulla curva in miniatura sulla destra. Si aprirà una piccola finestra con una curva di default in esso.
Vogliamo una curva a forma di parabola dove si alza e poi cade. Per impostazione predefinita, ci sono 2 punti sulla linea. Puoi aggiungere più punti facendo doppio clic sulla curva. Trascina i punti per creare una forma simile alla seguente.
Nella finestra degli animatori, aggiungi la clip in esecuzione. Inoltre, aggiungi un parametro float con lo stesso nome della curva, ad esempio ForwardRunCurve.
Quando viene riprodotta l'animazione, il valore float cambia in base alla curva. Il seguente codice mostrerà come utilizzare il valore float:
using UnityEngine;
using System.Collections;
public class RunAnimation : MonoBehaviour {
Animator animator;
float curveValue;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
curveValue = animator.GetFloat("ForwardRunCurve");
transform.Translate (Vector3.forward * curveValue);
}
}
La variabile curveValue mantiene il valore della curva (ForwardRunCruve) in qualsiasi momento. Stiamo usando quel valore per cambiare la velocità della traduzione. Puoi allegare questo script all'oggetto del gioco del giocatore.