Jump to content

Archived

This topic is now archived and is closed to further replies.

Jhonatan00_00

ANSWERED Ejes de rotación cambiados (SOLUCIONADO)

Recommended Posts

Buenos día, no hay manera... Ya de último he terminado copiando y pegando el script que crean en el tutorial y ni así me funciona. ¿Que hago mal?.

- He creado un Avatar Mask.

- He creado un script el cual he aplicado al personaje desde donde controlar el movimiento de la parte del cuerpo que quiero.

- He creado una nueva capa de animación en mi Animator y le he marcado el Avatar Mask y activado Ik Pass.

Y en lugar de conseguir que el objeto asignado al script (la cabeza) mire a otro objeto, lo que hace es fusionarme las dos animaciones de las dos capas y hacer movimientos raros en todo el cuerpo. No hay forma de conseguirlo.

Share this post


Link to post
Share on other sites

@Jhonatan00_00 Buenos días.

¿Estás entendiendo cómo funcionan los IK?
Te recomiendo leer acerca del tema de forma aislada a la implementación en Unity.

Para realizar correctamente el bypass de los IK deberias tener un Animator Controller configurado correctamente, obviando este tema, te intentare ayudar. 

  1. ¿Estás creando dos Layers en el Controlador?
  2. ¿Estás aplicando el comportamiento IK sobre el Layer correcto?
  3. ¿Estás aplicando la fuerza de rotación y posición al hueso correcto?
  4. ¿Has probado realizar IK bypass sobre todo los IK?

Realmente es simple de lograr el resultado del comportamiento básico de un IK con Avatar Mask y Animator Controller, quizas no estas dando con el problema. Intenta empezar un proyecto de cero solo para aprender sobre este tema.

Share this post


Link to post
Share on other sites
21 hours ago, francoe1 said:
  1. ¿Estás creando dos Layers en el Controlador?

Si, de hecho he aplicado al layer nuevo el Avatar Mask y dejo activa solo la cabeza para que la rotación no afecte a nada mas, pero no rota, lo que hace es fusionar la animación de la cabeza de las dos capas y se ve rara. Las fuerzas del IK no están actuando.

21 hours ago, francoe1 said:
  1.  
  2.  
  3. ¿Estás aplicando la fuerza de rotación y posición al hueso correcto?

He probado de muchas maneras, pero ahora mismo estoy aplicando la fuerza de rotación tal y como se explica en este tutorial de Unity, que se entiende mas fácil y va solo a lo que yo necesito. Ya no se que estoy haciendo mal: https://docs.unity3d.com/ScriptReference/Animator.SetIKRotation.html

Lo que si he observado es que en Unity siempre hablan de AvatarIkGoal.RightHand,  AvatarIkGoal.LeftHand,  AvatarIkGoal.RightFoot o  AvatarIkGoal.LeftFoot, refiriéndose a los pies o a las manos, pero no hay nada que se aplique a la cabeza. ¿Seguro que para que un personaje mire hacia un punto con la cabeza se usa IK?.

21 hours ago, francoe1 said:
  1.  
  2.  
  3.  
  4. ¿Has probado realizar IK bypass sobre todo los IK?.

He probado de todo, pero no hay manera...

Saludos.

Share this post


Link to post
Share on other sites

¿Seguro que para que un personaje mire hacia un punto con la cabeza se usa IK? 
Claro que sí, rotar la cabeza calcula el movimiento de muchos huesos, por esa razón no vas a encontrar un IK_GOAL para este caso se utiliza una función.

https://docs.unity3d.com/ScriptReference/Animator.SetLookAtPosition.html

Simplemente le pasa la posición que quieras que el persona mire y Unity se encarga de calcular la rotación de la cabeza, puedes modificar el peso de algunos huesos para lograr un resultado personalizado.

Share this post


Link to post
Share on other sites

Buscando información acabo de descubrir que podemos aplicar cambios de transformación directamente a los huesos sin que esto afecte a la animación ni tenga problemas con la misma y se consigue por medio de GetBoneTransform:

Direccion_Cabeza = Objeto.transform.position - transform.position;
Rotacion = Quaternion.LookRotation (Direccion_Cabeza);
Correccion = Quaternion.Euler (transform.rotation.x ,transform.rotation.y -90,transform.rotation.z -90);		

GetComponent<Animator>().GetBoneTransform(HumanBodyBones.Head).rotation = GetComponent<Animator>().GetBoneTransform(HumanBodyBones.Head).rotation * Rotacion * Correccion;

En el video tutorial que lo aplican funciona perfectamente: 

El problema está en que a mi no me funciona, lo que me está dando a pensar que puede ser por el Rig de los huesos de mi personaje o ya no se que puede estar mal, ¿alguna idea?.

Gracias!!.

Share this post


Link to post
Share on other sites

EL PROBLEMA ERA POR EL RIG DEL PERSONAJEEEEEE!!  jaajajajaj... :7_sweat_smile:

Para quien le ocurra esto: Hay que pinchar en el modelo de tu personaje, después en la pestaña Rig y donde pone Animation Type seleccionar Humanoide. Problablemente se te descoloquen todos los huesos de su sitio como me ha pasado a mi, pero puedes ir colocando uno por uno pinchando en Configure.

Ahora la cabeza rota hacia el objeto, pero al Rig le faltan huesos por añadir y el personaje al correr hace movimientos muy raros y como si su eje de rotación central estuviese mal, así que tengo que arreglar aún eso.

Share this post


Link to post
Share on other sites
7 hours ago, Jhonatan00_00 said:

EL PROBLEMA ERA POR EL RIG DEL PERSONAJEEEEEE!!  jaajajajaj... :7_sweat_smile:

Para quien le ocurra esto: Hay que pinchar en el modelo de tu personaje, después en la pestaña Rig y donde pone Animation Type seleccionar Humanoide. Problablemente se te descoloquen todos los huesos de su sitio como me ha pasado a mi, pero puedes ir colocando uno por uno pinchando en Configure.

Ahora la cabeza rota hacia el objeto, pero al Rig le faltan huesos por añadir y el personaje al correr hace movimientos muy raros y como si su eje de rotación central estuviese mal, así que tengo que arreglar aún eso.

Bienvenido al mundo de  los IK y los RIG... Es bastante complicado de encontrar el flujo de trabajo correcto, pero con el tiempo te vas acostumbrando a la forma de trabajar con RIG.

Share this post


Link to post
Share on other sites

Buenas tardes, he investigado sobre esto del Rig de los personajes y es para abrir otro tema a parte, porque según la cantidad de huesos de tu personaje Unity podrá funcionar bien o no y si tiene mas huesos de la cuenta como puede ser, un personaje alado, con cola, con seis brazos o dos cabezas no va a funcionar, a no ser que de alguna manera se pueda crear un Rig especifico para los huesos de tu personaje.

Share this post


Link to post
Share on other sites

¡Hola a todos, da gusto volver después de una semanita desconectado!

Leyendo vuestros comentarios a llegado a parar a lo que hablabais sobre avatar mask... y me habéis abierto las puertas a un nuevo mundo,

así que probando, e intentado hacer una animación en la que el personaje andaba, y e echo que al andar, también mueve el cuerpo hacia arriba y abajo, de manera que al final estoy moviendo todo el humanoid, y a la hora de superponer alguna animación a el player "como apuntar", pues no se ejecuta.... 

¿Alguien sabe como arreglarlo?

 

(e subido aquí la duda por que creo que tiene que ver con este tema, pero si alguien con mas experiencia en el foro me dice que deveria moverla, no hay problema)

 

Share this post


Link to post
Share on other sites

Buenas tardes Nomoregames, sin ver lo que ha hecho en su proyecto es muy difícil responder y aceitar a la primera, pero puede ser que el peso del Layer esté en 0 en el Animator y por eso al intentar reproducir la animación de la capa no lo haga. Lo de que al caminar se mueve arriba y abajo puede ser por el Rig del personaje, ¿si pone el Rig del personaje en Generic también pasa o es solo en Humanoid?.

Yo empezaría a leer todo despacio y a desmenuzar poco a poco todos los puntos, porque de un problema de la rotación de la cabeza hemos terminado con el tema de los Rig de los personajes y el Inverse Kinematics y su problema lo puede estar provocando cualquier cosa.

Un saludo.

Share this post


Link to post
Share on other sites

×
×
  • Create New...