Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Como puedo obtener las animaciones que está ejecutando el Animator

Iniciado por ftejada, Noviembre 11, 2017, 08:12:20 AM

Tema anterior - Siguiente tema
Hola a todos chicos!!!
 
 
 
He estado buscando en google y en la documentación de Unity y no he sabido encontrar la manera de hacer lo siguiente:
 
 
 
Necesito (via script), conseguir la informacion de cuantas animaciones y sus datos (peso de cada clip, nombre, etc) está ejecutando el Animator en un momento dado.
 
Se acceder al actual clip que está ejecutando el Animator con
 

AnimatorClipInfo[] m_CurrentClipInfo = this.animator.GetCurrentAnimatorClipInfo(0);

 
Pero si en ese momento el animator está ejecutando una mezcla de dos animaciones por pesos, no se como puedo obtener la información de los dos clips ..... No he sabido utilizar la Api de Unity para poder conseguirlo. ¿Podría alguien ayudarme u orientarme?
 
 
 
Saludos y gracias por adelantado

Hablo un poco por hablar, pero ¿has probado a hacerlo desde un animator behaviour asociado a cada animación? Se me ocurre que igual desde ahí podrías obtener información de cada uno de los clips y pasarla a algún sitio donde la manejes conjuntamente. Es una idea sobre sobre la marcha.

Noviembre 11, 2017, 09:02:18 PM #2 Ultima modificación: Noviembre 12, 2017, 09:29:26 AM por pioj
Hay 2 formas;
 
1) Con una funcioncon "Is Playin" que viene en  el componente animation
 



   
       
   
   
      animacion = GetComponent<Animation>();
   
   
      if(animacion.IsPlaying("Caminar"){
   
   
      print("Esta caminando");
   
   
      }
   
   
       
   

[/quote]
 
La segunda es guardando el nombre de el clip en reproducción dentro de  un string;
 



   
       
   
   
      public string GetAnimationStatus()
          {
              animacion = GetComponent<Animator>();
              AnimatorClipInfo[] informacion;
              informacion = animacion.GetCurrentAnimatorClipInfo(0);
   
   
      
              if (informacion.Length > 0)
                  return informacion[0].clip.name;
              else
                  return "Ninguno";
          }
   
   
       
   

[/quote]
 
Sin embargo es muy inportante entender que el primero te devuelve el NOMBRE DEL ESTADO DE ANIMACIÓN, y el segundo devuelve el NOMBRE DEL CLIP 

Lo que pasa que eso solo te da informacion de los clips que están en reproducción.
 
Pero si coges una referencia al Animator y haces un GetComponents (en plural) de los componentes Animation, te deberían salir todos ¿no?

Gracias a ambos por contestar!
 
 
 
La opción que indica Centauro5legs, o no consigo entender lo que quiere decir, o por lo que parece no me vale para lo que necesito. (Lo que necesito es obtener la información de todos los clips de animación que esté ejecutando el Animator en un frame concreto). Es decir y vuelvo a repetir, que si el animator está ejecutando dos clips a la vez que se estan mezclando por pesos como podría ser en un Walk + WalkTurnRight, en la que segun pulsemos la palanca cada una de estos clips tendrá mas o menos peso respecto al otro/s en dicho estado de la animación.
 
Siento si no consigo explicarme bien.
 
 
 
Referente a lo que dice FNP,
 



   
      hacerlo desde un animator behaviour asociado a cada animación
   

[/quote]
 
no termino de entender a qué te refieres. Podrías explicarme un poco? Quizas la solución vayan por ahí...
 
 
 
Saludos

Podrías subir una imagen de tu animator y como se conectan los diferentes estados de interés?, más que nada para visualizar la situación ya que con solo leerlo no dibujo bien la estructura, ni lo de los pesos como afectaba a todo. Recuerdo algo de los blendTree pero hasta por ahí nomás, (nunca los usé y no se si es lo que estás usando).

Cita de: lightbug date=1510527986Podrías subir una imagen de tu animator y como se conectan los diferentes estados de interés?, más que nada para visualizar la situación ya que con solo leerlo no dibujo bien la estructura, ni lo de los pesos como afectaba a todo. Recuerdo algo de los blendTree pero hasta por ahí nomás, (nunca los usé y no se si es lo que estás usando).
   


Si es eso, los blendTree. Es el AnimatorController que trae el ThirdPersonController de los standar Assets. Los clips de animacion del Blend Tree se van mezclando en función del peso según los valores del Input. No tiene mucha historia.
 
Pero no se como poder obtener la info de los dos clips que se esten mezclando ya que
 

AnimatorClipInfo[] m_CurrentClipInfo = this.animator.GetCurrentAnimatorClipInfo(0);

 
Te suelta siempre la info de un solo clip de los dos/tres que intervienen, (por logica imagino que el que más peso tiene en la mezcla).
 
 
 
Quizas no se pueda obtener dicha información... Aunque me parece extraño que en la API no haya nada para esto. Aunque yo no he sabido verlo/utilizarlo
 
¿Alguna sugerencia?
 
Saludos

Etiquetas: