Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: rogerdv en Abril 18, 2016, 08:54:08 PM

Título: Determinar si una animacion ha terminado
Publicado por: rogerdv en Abril 18, 2016, 08:54:08 PM
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?
Título: Determinar si una animacion ha terminado
Publicado por: GSG3D en Abril 18, 2016, 09:23:51 PM
Podrías probar con esto http://docs.unity3d.com/ScriptReference/Animation.IsPlaying.html
Título: Determinar si una animacion ha terminado
Publicado por: DavidV en Abril 18, 2016, 10:48:13 PM
La mejor manera es usar mecanim.https://unity3d.com/es/learn/tutorials/modules/beginner/live-training-archive/animate-anything
Título: Determinar si una animacion ha terminado
Publicado por: Jorge Alejandro en Abril 20, 2016, 02:38:32 PM
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
Título: Determinar si una animacion ha terminado
Publicado por: rogerdv en Abril 21, 2016, 07:26:24 PM
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.
Título: Determinar si una animacion ha terminado
Publicado por: kaito en Abril 21, 2016, 09:59:18 PM
[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));

}
 
Título: Determinar si una animacion ha terminado
Publicado por: rogerdv en Abril 25, 2016, 07:28:05 PM
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.
Título: Determinar si una animacion ha terminado
Publicado por: nightborn en Abril 26, 2016, 12:24:05 AM
[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:
  1. Creas un booleano llamado, por ejemplo, "animStarted", y un método llamado, por ejemplo, animFinished().
  2. Al iniciar la animación, "animStarted" toma el valor de true.
  3. En el método Update, si animStarted es true...
    1. 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 :P 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.