Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: ftejada en Agosto 25, 2017, 02:06:12 PM

Título: Orden ejecucion Animaciones del Animator / OnAnimatorIK
Publicado por: ftejada en Agosto 25, 2017, 02:06:12 PM
Hola gente!!! Tengo una duda que no he sabido encontrar una respuesta exacta.
 
 
 
He mirado en el manual de Unity el "Orden de ejecucion de Funciones de Evento". He visto que la actualización de "Internal Animations" se ejecuta despues del Update y antes del LateUpdate...
 
Mis dudas son:
 
1) cuando dice lo de Internal Animations Update, imagino que se refiere a todas las animaciones de "Animator", etc. ¿Es cierto eso? Si no fuese asi... ¿En qué momento se actualizan las animaciones?
 
2) en qué momento concreto se ejecuta la función OnAnimatorIK(), despues de los Updates y antes de los LateUpdates? y lo mas importante ¿Las animaciones del Animator se actualizan en cada frame antes de que se ejecute la función OnAnimatorIK o despues?
 
 
 
Saludos y gracias por adelantado.
Título: Orden ejecucion Animaciones del Animator / OnAnimatorIK
Publicado por: James Roman en Agosto 25, 2017, 03:55:57 PM
Buenos tambien tengo algunas dudas con respecto a esto, pero primero si se refiere a las animaciones del Animator para que te de la oportunidad de modificar  las animaciones si lo deseas en el lateUpdate, ya que el animator sabe donde ir el siguiente frame.
 
con lo demas tambien quisiera leer una respuesta
Título: Orden ejecucion Animaciones del Animator / OnAnimatorIK
Publicado por: lightbug en Agosto 25, 2017, 06:58:50 PM
Segun esta pagina https://docs.unity3d.com/Manual/ExecutionOrder.html (https://docs.unity3d.com/Manual/ExecutionOrder.html) la actualizacion de las animaciones (Animator) ocurre despues de Update y antes de LateUpdate, entonces:
 
1 - El animator por como la palabra lo dice es el animador, (las animaciones o clips por si solos solo son datos), es decir que cuando esto habla de internal Animations update estará hablando del mismo componente Animator (que es el que tiene la funcionalidad)
 
2 - Siempres que tengas dudas de que con respecto a que se ejecuta antes/despues usa print's :
 

void Update()
{
print("Update");
}
void OnAnimatorIK(int layerIndex) {
print("Animator IK");
}
void LateUpdate()
{
print("LateUpdate");
}

 
y para "la mas importante" ya no te puedo decir nada, me parece igual que es algo rebuscado, quizas algun unity developer de los de los foros oficiales pueda haber soltado algo de info, en las referencias no dice nada, solo que cuando actualiza su sistema de IK interno llama a esa funcion...pero te pregunto para que queres saber esto? es por lo de los IK?
 
 
Título: Orden ejecucion Animaciones del Animator / OnAnimatorIK
Publicado por: ftejada en Agosto 25, 2017, 08:15:11 PM
Cita de: lightbug date=1503680330Segun esta pagina https://docs.unity3d.com/Manual/ExecutionOrder.html (https://docs.unity3d.com/Manual/ExecutionOrder.html) la actualizacion de las animaciones (Animator) ocurre despues de Update y antes de LateUpdate, entonces:
   
   
      1 - El animator por como la palabra lo dice es el animador, (las animaciones o clips por si solos solo son datos), es decir que cuando esto habla de internal Animations update estará hablando del mismo componente Animator (que es el que tiene la funcionalidad)
   
   
      2 - Siempres que tengas dudas de que con respecto a que se ejecuta antes/despues usa print's :
   
   

void Update()
{
print("Update");
}
void OnAnimatorIK(int layerIndex) {
print("Animator IK");
}
void LateUpdate()
{
print("LateUpdate");
}

   
      y para "la mas importante" ya no te puedo decir nada, me parece igual que es algo rebuscado, quizas algun unity developer de los de los foros oficiales pueda haber soltado algo de info, en las referencias no dice nada, solo que cuando actualiza su sistema de IK interno llama a esa funcion...pero te pregunto para que queres saber esto? es por lo de los IK?
   
   
       
   


 
 
Gracias por responder a ambos...
 
Si @lightbug, es relacionado a lo de los IK´s.
 
Veras... lo mismo sabes como se hace. Quiero hacer IK en los pies del character para que cuando ande vaya adaptando la pisada a las irregularidades del terreno (Como por ejemplo subir escalones como mostré en un video en el post de la otra vez o simplemente a cuestas y desniveles en el terreno).
 
 
 
Ya mas o menos estoy sabiendo contruir mi propio sistema IK, pero para el tema de los pies y andar... es otra historia. O es algo simple que no me dado cuenta o es más complejo de lo que pensaba.
 
El caso es que no encuentro la manera de que el character siga con su animacion de "piernas" al andar adaptandolo a las distintas alturas de donde debería pisar.  Pero si el OnAnimatorIK se ejecuta despues de que el Animator actualice la posicion de las animaciones... ahí se me ocurren algunas ideas de como hacerlo. De ahí mi pregunta
 
De momento estoy Tirando raycast desde la posicion de cada pie hacia abajo para ver donde estaría el punto/altura en el que debe el character apoyar el pie. Pero si le digo que mediante el IK vaya a esa nueva altura y "modifique" la posicion natural de ese pie en la animacion, este pie se me queda clavado en el piso.
 
Vi en uno de los videos que la persona creaba un parametro float para cada pie en el Animator. Y en cada clip de animacion que tengas, debes incluir una "Curves" para que el valor de los parametros float que creaste en el Animator cambien de 0~1 en funcion de si el pie está apoyado o en el aire dentro del loops de la animacion.
 
 
 
Pero se que se puede hacer sin tener que estar añadiendo esas curvas a cada clip ni tener que crear esos dos parametros floats en el Animator. Pero no consigo encontrar la forma de hacerlo.
 
En principio estoy probando con la altura del propio Character como referencia a la altura de cada pie. Es decir si la posFootBone.y es superior characterPosition.y, quiere decir que ese pie está en el aire.
 
Tambien si tu tiras en cada frame un raycast hacia abajo de cada pie (posFootBone) ves el punto exacto donde estaría la altura a la que debe pisar. Y si está altura de la pisada es superior o inferior a la characterPosition.y debes incrementar el peso para el IK y llevar ese pie a esa nueva altura (que sera la correcta).
 
Pero llegados a este punto no se en qué puedo basarme para decirle a ese pie cuando puede continuar con su "animación" en vez de quedarse pegado al punto a donde lo llevamos con el IK????
 
 
 
Me es algo dificil de explicar. Y siento si no se entiende bien. Dejo video para que veas a lo que me refiero.
 
https://youtu.be/RoMYOi4SnHY (//%5Byoutube%5Dhttps://youtu.be/RoMYOi4SnHY%5B/youtube%5D)
 
Saludos
Título: Orden ejecucion Animaciones del Animator / OnAnimatorIK
Publicado por: lightbug en Agosto 25, 2017, 08:23:04 PM
Cita de: ftejada date=1503684911Me es algo dificil de explicar. Y siento si no se entiende bien. Dejo video para que veas a lo que me refiero.
   
   
      https://youtu.be/RoMYOi4SnHY (//%5Byoutube%5Dhttps://youtu.be/RoMYOi4SnHY%5B/youtube%5D)
   
   
      Saludos
   


Jaja hiciste un tony hawk pro skater!
 
 
 
Cita de: ftejada date=1503684911De momento estoy Tirando raycast desde la posicion de cada pie hacia abajo para ver donde estaría el punto/altura en el que debe el character apoyar el pie. Pero si le digo que mediante el IK vaya a esa nueva altura y "modifique" la posicion natural de ese pie en la animacion, este pie se me queda clavado en el piso.
   


y pasale en vez de esa altura una altura mayor, ponele unos 20 cm mas, que se yo , a modo de prueba
 
 
Título: Orden ejecucion Animaciones del Animator / OnAnimatorIK
Publicado por: ftejada en Agosto 25, 2017, 10:03:55 PM
Cita de: lightbug date=1503685384Jaja hiciste un tony hawk pro skater!
   
   
       
   
   
      y pasale en vez de esa altura una altura mayor, ponele unos 20 cm mas, que se yo , a modo de prueba
   
   
       
   


jeje!!
 
Si, si... los rayos tienen un offset y le doy mas longitud...  Pero en el fondo eso no creo que tenga nada que ver con el verdadero problema.
Título: Orden ejecucion Animaciones del Animator / OnAnimatorIK
Publicado por: lightbug en Agosto 26, 2017, 02:43:53 AM
Cita de: ftejada date=1503691435Si, si... los rayos tienen un offset y le doy mas longitud.
   


osea yo digo no los rayos en si, sino el punto que te devuelve, sumale un Vector3.up * (x centimetros) y ahi es donde deberia pisar, que se yo estoy tirando por tirar  la verdad no se como funcionan bien los IK.
 
Fijate que hay un ejemplo clasico de Unity de un policia con su arma que caminaba por todos lados, te estoy hablando de Unity 4 quizas hoy en dia existan mejores y mas modernos pero es el unico que recuerdo.
Título: Orden ejecucion Animaciones del Animator / OnAnimatorIK
Publicado por: ftejada en Agosto 26, 2017, 12:12:00 PM
Cita de: lightbug date=1503708233osea yo digo no los rayos en si, sino el punto que te devuelve, sumale un Vector3.up * (x centimetros) y ahi es donde deberia pisar, que se yo estoy tirando por tirar  la verdad no se como funcionan bien los IK.
   
   
      Fijate que hay un ejemplo clasico de Unity de un policia con su arma que caminaba por todos lados, te estoy hablando de Unity 4 quizas hoy en dia existan mejores y mas modernos pero es el unico que recuerdo.
   


También lo tengo hecho. Pero nada tampoco tiene que ver... o eso creo pq influir en el problema no influye...