He estado investigando al respecto, porque necesito que al terminar una animación, el personaje vuelva a la animación anterior. Una opción que vi es los animation events. No me resultaron muy claros (la documentación parece escasa) y quisiera saber si hay otra variante que implique más código y menos clicks. Alguien me puede orientar al respecto?
es faci solo tienes que hacer referencia a la animacion con un GetComponent<Animation>() y creo que hay una function que se llama isPlaying, si esta en false, es poerque ya termino o no ha empezado
Animation ya es obsoleto, y el componente Animator no trae isPlaying(). Parece que la solucion obligatoria es usar animation events, pero no logro enocntrar cómo hacerlo de forma genérica y no asociado a un GameObject específico.
[quote author=rogerdv" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35679" data-ipsquote-contentcommentid="129995">Animation ya es obsoleto, y el componente Animator no trae isPlaying(). Parece que la solucion obligatoria es usar animation events, pero no logro enocntrar cómo hacerlo de forma genérica y no asociado a un GameObject específico.[/quote]Utilizando
animator.GetCurrentAnimatorStateInfo para comprobar cuando comienza y finaliza una animacion.En el siguiente script he utilizado una corrutina:
}
void Accion(){
Debug.Log("Animacion NombreAnimacion finalizada");
}
IEnumerator EventoFinAnimacion(int layerAnimacion, string nombreAnimacion, System.Action accion){
while(!this.animator.GetCurrentAnimatorStateInfo(layerAnimacion).IsName(nombreAnimacion)) yield return null;
while( this.animator.GetCurrentAnimatorStateInfo(layerAnimacion).IsName(nombreAnimacion)) yield return null;
accion();
}
}
Puedes hacerlo infinito haciendo una llamada a la corrutina al final de la misma: //Bucle Infinito
IEnumerator EventoFinAnimacion(int layerAnimacion, string nombreAnimacion, System.Action accion){
while(!this.animator.GetCurrentAnimatorStateInfo(layerAnimacion).IsName(nombreAnimacion)) yield return null;
while( this.animator.GetCurrentAnimatorStateInfo(layerAnimacion).IsName(nombreAnimacion)) yield return null;
accion();
StartCoroutine(EventoFinAnimacion(layerAnimacion, nombreAnimacion, accion));
}
Bastante cercano, pero esto no detecta el fin de la animación, a menos que dispare una transición. Y lo que necesito es saber si ha terminado para ejecutar la transición al estado previo.
[quote author=rogerdv date=1461605285" data-ipsquote="" data-cite="rogerdv" class="ipsQuote">Bastante cercano, pero esto no detecta el fin de la animación, a menos que dispare una transición. Y lo que necesito es saber si ha terminado para ejecutar la transición al estado previo.[/quote]Puedes hacer algo rudo con scripting puro:
- Creas un booleano llamado, por ejemplo, "animStarted", y un método llamado, por ejemplo, animFinished().
- Al iniciar la animación, "animStarted" toma el valor de true.
- En el método Update, si animStarted es true...
- Si animacion.isPlaying es false, se llama al método animFinished() y animStarted toma el valor de false.
Algo así debería ser. Espero que te ayude!PD: Ahora miro el tema de los eventos con animaciones, que lo utilicé hace tiempo y no me acuerdo muy bien como funcionaban

Título:
Determinar si una animacion ha terminado
Publicado por:
rogerdv en
Abril 26, 2016, 05:33:35 PM
He resuelto de una forma un poco burda con un trigger, para disparar la animación de ataque, y una transición sin condiciones que regresa al estado anterior. Lo cual no me resuelve el problemaque aún no sé cuándo la animación ha terminado y no puedo calcular correctamente si puedo ejecutar una acción a continuación.