Noticias

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

Temas recientes

Animation con RigidBody. Is kinematic necesario ?

Iniciado por AngelFG, Febrero 12, 2019, 05:47:56 PM

Tema anterior - Siguiente tema
Febrero 12, 2019, 05:47:56 PM Ultima modificación: Febrero 12, 2019, 06:41:31 PM por AngelFG
Buenas.
 
Llevo dándole vueltas a este tema y no lo tengo claro (o sí :) ) y por eso no me cuadra alguna cosa.
 
 
 


  •    En teoría, cuando tenemos un objeto con un collider sin RigidBody es Static RigidBody y es necesario marcarlo como 'Is kinematic' cuando queremos aplicar una animación sobre él, ya que con esa opción marcada podemos hacer uso de su componente Transform para moverlo.


  •    También está puesto que si un GameObject quiere ser manejado utilizando 'fuerzas' no podemos hacer uso de su componente Transform para moverlo.


Con esas dos condiciones, ¿ cómo se hace para tener un GameObject que  se mueva con el motor de físicas (por su RigidBody) pero que tenga una animación asociada cuando lo movemos ?
 
Acabo de mirar el juego que tiene Unity para formación (unity zombie toys) y en él sus protagonistas tienen animación pero no están marcados como 'Is Kinematic' y se mueven por su RigidBody. ¿ Esto no contradice la condición de que si se hace uso del Transform hay que marcar dicha opción ?
 
 
 
Gracias por la ayuda

Cita de: AngelFG date=1549990076y es necesario marcarlo como 'Is kinematic' cuando queremos aplicar una animación sobre él
   


la verdad no estoy al 100% seguro de esto pero si querés que las físicas tengan conocimiento de un objeto ponele un RB. SI querés que además no simulen al objeto dentro de su mundo de velocidades/aceleraciones ponelo como is kinematic. Las animaciones (animator) es ejecutado en una parte específica del ciclo de Unity (creo que despues de LateUpdate), por lo tanto no se que tan "necesario" sea marcarlo como kinematico.
 
Cita de: AngelFG date=1549990076Con esas dos condiciones, ¿ cómo se hace para tener un GameObject que  se mueva con el motor de físicas (por su RigidBody) pero que tenga una animación asociada cuando lo movemos ?
   


Eso se logra moviendo (kinematico o dinámico) a un objeto que no te ofrece animaciones, por ej una capsula o una caja, que es lo que realmente iteractua con el mundo. La animación la tendrá la parte visual o gráfica, el personaje modelado en 3D o el sprite 2D, entonces separás ambos mundos.
 
Cita de: AngelFG date=1549990076Acabo de mirar el juego que tiene Unity para formación (unity zombie toys) y en él sus protagonistas tienen animación pero no están marcados como 'Is Kinematic' y se mueven por su RigidBody. ¿ Esto no contradice la condición de que si se hace uso del Transform hay que marcar dicha opción ?
   


No se la verdad como es ese proyecto en detalle, tampoco se ni tengo experiencia en animar físicas aunque muchas veces creo ver un botón o bool que dice "Animate Physics" (q no recuerdo ahora mismo donde está!! ). Dicho esto, vos podés tener un component Animator en el Padre(este siendo un RB dinámico) y que el hijo "i" solamente se vea afectado por el clip, de hecho si te fijas podés poner de propiedad de animación lo que vos quieras dentro de la jerarquía del objeto. Por ej podrías meter una bola rodando (RB dinámico) y dentro un objeto que hace un movimiento senoidal en dirección up (que se yo) y todos contentos (sacando los problemas del frameRate que vas a tener sin interpolar y demás).
 
 
 
Cita de: AngelFG date=1549990076¿ Esto no contradice la condición de que si se hace uso del Transform hay que marcar dicha opción ?
   


Hace algunas versiones mover cosas sin RB era herejía pura, estos colliders eran llamados (y lo son) Static Colliders. Después los Unity se dieron cuenta que todo el mundo movía cosas sin ponerles RB's (kinemáticos o no), entonces agarraron y metieron dentro de las físicas a los static colliders, es decir ahora por defecto existe un overhead al cuete para los static colliders, pero están todos los objetos contemplados.
 
Osea que yo lo entiendo/veo como que, tener un RB te da las prestaciones que el mundo físico te da:
 


  •    incluirlos en el mundo del FixedUpdate (y lograr independencia del frameRate)


  •    interpolación


  •    extrapolación


  •    interacción de kinematicos vs dinámicos (q con statics no pasa)


  •    uso de OnCollisionEnter/Stay/Exit (por lo anterior hay "datos" que el motor de físicas tiene en cuenta que antes no)


Vos podés mover/animar a un Transform todo lo que quieras con y sin kinematic probablemente no pase nada a nivel performance, puede que incluso sea hasta más rápido (no lo se) pero de movida perdés los puntos anteriores.
 
 
 
Saludos

Gracias por responder al mensaje.
 
 
 



   
       
   
   
      la verdad no estoy al 100% seguro de esto pero si querés que las físicas tengan conocimiento de un objeto ponele un RB. SI querés que además no simulen al objeto dentro de su mundo de velocidades/aceleraciones ponelo como is kinematic. Las animaciones (animator) es ejecutado en una parte específica del ciclo de Unity (creo que despues de LateUpdate), por lo tanto no se que tan "necesario" sea marcarlo como kinematico. 
   

[/quote]
 
Esto sería interesante de confirmar ya que de esta forma no habría necesidad de hacer 'más complejo' el GameObject (lo de complejo por la siguiente pregunta)
 
 
 



   
      Eso se logra moviendo (kinematico o dinámico) a un objeto que no te ofrece animaciones, por ej una capsula o una caja, que es lo que realmente iteractua con el mundo. La animación la tendrá la parte visual o gráfica, el personaje modelado en 3D o el sprite 2D, entonces separás ambos mundos.
   

[/quote]
 
Esta parte no la entiendo.
 
¿ Quieres decir que podría crear un EmptyGameObject formado por dos GameObjects:
 


  •    En uno irá el Collider con el RigidBody que sería el que tendría que mover haciendo uso de la física.


  •    En el otro iría el Modelo con el Animator Controller asociado y las animaciones


?
 
 
 
Un saludo y gracias por la ayuda.
 
 

Cita de: AngelFG date=1550071718¿ Quieres decir que podría crear un EmptyGameObject formado por dos GameObjects:
   
   


  •          En uno irá el Collider con el RigidBody que sería el que tendría que mover haciendo uso de la física.
          

  •       

  •          En el otro iría el Modelo con el Animator Controller asociado y las animaciones
          

  •    

      ?
   


Exactamente, de hecho en muchos CharacterController de ejemplo se usa eso (también en unreal). Además si jugás a algun juego lo podés "sentir",como el modelo que ves no es 100% fiel al modelo real que colisiona con el mundo, por eso están los IK (creo que son los de los piés y manos?). Si ves que usan IK para los piés y demás, es porque de eso (hacer coincidir las extremidades con el terreno) se encarga solito el objeto que está animado, pero quien mueve al conjunto por el mundo es el del Collider+Rigidbody.
 
La jerarquía que yo uso generalmente es:
 
- Character Controller (maestro, encargado del movimiento y colisiones)

------- Cuerpo( animaciones, visuales, etc)

--------------- Gráficos ( Contenido de cuerpo, puede ser tu modelo FBX 3D, tu sprite)

------- Opcional 1

------- Opcional 2

------- ( ... )
 
 

Etiquetas: