Unity Gravedad. RigidBody

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introducción

  • Más información en:


  • Unity permite hacer uso del denominado motor de físicas (Physics Engine).
Este es un software que permite emular el comportamiento real de los objetos cuando cuando son afectados por la gravedad.


  • Podemos diferenciar dos aspectos:
  • Sobre un objeto (GameObject) actúa la gravedad y por tanto existe una fuerza que hace que caiga.
Relacionado con la gravedad existen varios parámetros como el rozamiento, la fuerza de la gravedad,...
  • Cuando dos cuerpos 'chocan' estos reaccionan desplazándose en base a las fuerzas y dirección.
Esto lo veremos en un punto posterior, son los denominados colliders.


Unity3d gravedad 1.jpg



  • MUY IMPORTANTE: En el momento en que asociamos un RigidBody a un GameObject, este debería desplazarse siguiendo las reglas del motor de físicas, en base a 'fuerzas' que son aplicadas sobre el GameObject.
Por lo tanto no debemos de moverlo haciendo uso de su componente transform, como hemos hecho hasta ahora.



Añadiendo un RigidBody

  • El objeto no para de caer ya que no hemos visto los Colliders, que son los elementos dentro del motor de físicas, que hacen que 'choquen' unos GameObjects con otros.



Parámetros del RigidBody

Unity3d gravedad 1.jpg


  • Mass: La masa en kilogramos.
Recordar que aumentar la masa no supone caer más rápido :)
Supone que necesitaremos más fuerza para mover el objeto.
  • Drag: Es la resistencia del aire al moverse el objeto como consecuencia de una fuerza aplicada al mismo.
  • Un valor 0 indica que no hay resistencia.
  • Un valor infinito indica que se para inmediatamente.
En el ejemplo anterior, podemos escribir Infinity en la propiedad Drag y observaremos como el camión no cae, pero no porque la gravedad no 'tire' de él, sino por la modificación en la propiedad Drag.
Unity3d gravedad 6.jpg
  • Angular Drag: Es la resistencia del aire al rotar el objeto. Un valor 0 indica que no hay resistencia (no tiene el efecto anterior de poner Infinity).
  • Use Gravity: Indica si al GameObject le afecta la gravedad. En caso de desmarcarlo, el camión no caería pero si tuviera un Collider se vería afectado por las colisiones con otros GameObjects.
  • Is Kinematic: Esta opción la veremos cuando veamos los Colliders. Sirve para que podamos tener asociado un Collider a un GameObject que se va a desplazar en el juego, pero que no se vea 'afectado' por el motor de físicas. Por tanto, vamos a poder controlarlo como hemos hecho anteriormente, mediante su componente transform y mediante scripts.
  • Interpolate: No deberíamos necesitar tocas esta opción. Indica la forma en como el motor de físicas calcula las posiciones por las que debe pasar el GameObject para llegar a su destino en base a las fuerzas aplicadas sobre él. Si vemos que el movimiento de un GameObject va a saltos o se comporta de forma extraña podríamos escoger alguna de las opciones disponibles.
  • Collision Detection: El valor por defecto es 'Discrete'. Cuando tenemos un GameObject que se mueve a mucha velocidad, puede suceder que se produzca una colisión entre dos frames del movimiento y que dicha colisión no se detecte. Para evitarlo podemos cambiar el valor de este parámetro:
  • Continous: Utilizado para detectar cuando el GameObject pasa a través de un Static GameObject que no tenga RigidBody asociado o bien a través de un GameObject con un RigidBody que tenga el modo 'Colission Detection' a 'Discrete'.
  • Continous Dynamic: Utilizado para detectar el GameObject pasa a través de otro GameObject que tenga el modo 'Colission Detection' a 'Continous' o 'Continous Dynamic'
  • Continous Speculative: Requiere menos carga de CPU que en el caso anterior, y lo que hace es 'presuponer' la trayectoria que va a seguir el GameObject para determinar si va a ver una colosión.
Más información y ejemplos en este enlace: https://docs.unity3d.com/Manual/ContinuousCollisionDetection.html
  • Constraints:
Unity3d gravedad 7.jpg
Al marcar un eje hacemos que dicho eje no se vea afectado por las fuerzas al producirse una colisión.
Podemos evitar que sufra cambios tanto cuando el movimiento implique un cambio de posición (Freeze Position) como cuando implique un cambio en la rotación (Freeze Rotation).
Veremos ejemplos de esto cuando explique los Colliders.



Unión de GameObjects haciendo uso del Physics Engine









-- Ángel D. Fernández González -- (2018).