Unity 2021: RigidBody2D el componente para físicas

En este blog te explicaremos las propiedades del componente Rigidbody2D de Unity, con el objetivo de que logres un uso más eficiente de este componente y de esa manera convertirte en un mejor desarrollador de videojuegos.

Contenido

  • 1.¿Qué es el componente Rigidboy2D?
  • 2.¿Cómo funciona el componente Rigidbody2D de Unity y como agregarlo a un objeto?
  • 3.Propiedades del componente Rigidbody2D
  • 4.Otras propiedades del Rigidbody2D
  • 5.Otras Recomendaciones de rendimiento

1.¿Qué es el componente Rigidboy2D?

El Rigidbody2D es el componente encargado de dotar a tu objeto de juego con la capacidad de percibir y responder a las fuerzas físicas, lo que le permite ser afectado por la gravedad y fuerzas de movimiento o rotación

2.¿Cómo funciona el componente Rigidbody2D de Unity y como agregarlo a un objeto?

El rigidbody2D funciona como puente entre las fuerzas externas que se le aplican al objeto y los colliders que a su vez lo transmiten al componente transform.

De tal manera que el Rigidbody modifica el componente transform, es por eso que debes tener claro como moverás tu objeto lo que se puede hacer desde el componente Rigidbody o el componente transform y como recomendación nunca hacerlo desde los dos componentes a la vez para evitar movimiento erráticos y mejorar el rendimiento en general. 

Además por cuestiones de rendimiento siempre que requieras mover un objeto es útil agregar un Rigidbody2D y no solo moverlo desde la transformada. Si no quieres que sea afectado por las fuerzas de gravedad solo debes seleccionar el BodyTipe “Kinematic” que se explicara más adelante. 

Es también útil recordar que los Rigidbody requieren componentes collider para detectar las colisiones. Si tu objeto no tiene colliders nunca colisionara así tenga un Rigidbody.

Para utilizar este componente ve  a la Hierarchy>CreateEmpty con esto crearemos un objeto de juego vacío, si quieres llámalo “Object” si lo seleccionas en el inspector encontraras el componente transform el cual tiene las propiedades, “Position”, “Rotation” y “Scale”. 

Ahora donde dice “Add component” busca el componente “Rigidbody2D” y lo seleccionas.

Con lo que se agregara el siguiente componente.

En el siguiente apartado explicaremos cada propiedad

3.Propiedad “Body Type” del componente Rigidbody2D

El componente Rigidbody2D cuenta con diferentes propiedades que te permiten manipular como la gravedad y demás fuerzas interactúan con el objeto pero la propiedades más importante es el “Body Type”, define cómo se comportará el Rigidbody2D respecto a las fuerzas que se aplicaran al objeto y la interacción con colliders, existen tres opciones “Dynamic”, “Kinematic” y “Static”.

  • BodyType>Dynamic: Es el que genera más costo de procesamiento dado que es el que permite que tu objeto de juego interactúe con todos los tipos de fuerzas físicas. 
  • BodyType>Kinematic: Se utiliza para ahorrar recursos del sistema, dado que el objeto sólo se moverá via script, las fuerzas como la gravedad no lo afectara. Usualmente los “Kinematic” no colisionará contra otros objetos con Rigidbody “Kinematic” o “Static”, sólo con los “Dynamic”. Los “Kinematic” serán inamovibles a menos que los movamos por script. Son útiles para plataformas con movimiento prefijados. 
  • BodyType>Static: Es la opción que menos recursos usa, esta hecho para no moverse por lo que si via script lo mueves se consumirán recursos de la manera inadecuada. Este Body Type solo colisiona con los Rigidbody “Dynamic”. Un dato importante es que si digamos tenemos un objeto que tiene un componente collider sin Rigidbody, este objeto se comportara como si tuviera un Rigidbody de tipo “Static” por lo que al moverlo por script consumirá más recursos.

4.Otras propiedades del Rigidbody2D

Las siguientes propiedades dependen del Body Type seleccionado:

  • Material: En este espacio podemos arrastrar un material de física o “Physic Material” el cual le dará ciertas propiedades a tu objeto. En otro blog explicamos cómo setear un material de física y sus propiedades.
  • Simulated: Permitirá que el Rigidbody interactúe con las fuerzas externas como la gravedad por default está activo, esta propiedad esta creada para facilitar el desactivar o activar de una manera más eficiente la simulación de física, siendo mucho más practico que desactivar todo el componente.
  • Auto mass: Hace que el Rigidbody detecte la masa de manera automática basado en el tamaño del collider de tu objeto.
  • Mass: La masa del objeto está medida en kg. Dos objetos que colisionan con masas diferentes responderán de manera diferente.
  • Drag: Definirá cuanta resistencia al aire genera el objeto. Si es 0 no habrá resistencia, entre más alto el número más rápido se frenará el objeto. Si dos objetos tienen la misma masa esta opción determinara cual de los dos caerá más rápido en la simulación. El valor de 0 simulara un objeto con poca resistencia y un valor de 10 un objeto de alta resistencia como una pluma. 
  • Angular Drag: Cuánta resistencia al aire genera el objeto cuando está girando o bajo el efecto de fuerzas de rotación
  • Gravity scale: Determinará en qué grado el objeto será afectado por la gravedad. Si es 0 el objeto de juego no será afectado, entre más alto el valor más repercusiones tendrá la gravedad sobre el objeto. Es de recordar que los “Kinematic” no serán afectados por fuerzas externas
  • Collision detection: Usado para evitar que los objetos pasen a otro collider si van muy rápido, esto se produce dado que si nuestro objeto va muy rápido puede suceder que en el frame actual se esté acercando a un objeto pero en el siguiente frame ya atraviese el objeto por lo que si no ajustamos esta opción tendremos problemas a futuro con los movimientos rápidos. 
    • Discrete: establecido por default, si tus objetos no van muy rápido no debería haber problema con dejarlo así
    • Continuos: Evitará que tu objeto pase a través de otros pero tendrá un costo de rendimiento. Lo que hará Unity es calcular el punto de contacto entre dos colliders antes de que suceda en el siguiente frame.
  • Sleeping mode: determinara en que momento se activara las simulaciones de físicas para tu objeto, ajustarlo puede mejorar el rendimiento de tu juego. 
    • Never sleep: consume más recursos, dado que nuestro objeto siempre estará dentro de la simulación de física.
    • Start awake: el objeto se activará al iniciar la escena
    • Start asleep: el objeto activara la simulación de físicas al detectar colisiones 
  • Interpolate: Usado para mejorar la desincronización entre por ejemplo el Update de las físicas y el Update de las graficas, en otras palabras sirve sobre todo para la desincronización entre tu objeto de juego y el escenario. Por lo que Unity recomienda solo activarlo para tu personaje principal. Por default  viene desactivado. 
    • None: No hay suavizado
    • Interpolate: El suavizado se genera usando frames previos
    • Extrapolate: El suavizado se genera con la estimación de frames futuros
  • Constraints: Restringe el movimiento de tu objeto para los ejes x, y y z
    • Freeze position: restringe los movimiento en el x y y
    • Freeze rotation: restringe los movimiento en el eje z

Para el “Body Type”> “Kinematic” existe una propiedad extra:

  • Use Full Kinematic Contacts: COmo mencionamos antes los “Kinematic” solo colisionan con los “Dynamic” si queremos que nuestro objeto “Kinematic” colisione con todas las opciones de “Body Type” debemos seleccionar esta opción, hará que los rigidbody2d “Kinematic” colisionen también con otros “Kinematic”, si no esta seleccionada solo colisionara con los “Dynamic”.

5. Otras recomendaciones de rendimiento

  • Recordar que todo lo relacionado con físicas debe actualizarse en el FixedUpdate() y no en el Update()
  • Modificar la matriz de colisión: Se escapa a la intención de este blog pero aquí puedes ver como ajustar la matriz de colisión opción que puede mejorar el rendimiento de tu juego.
  • Determinar si requieres un Rigidbody 2D o 3D antes de agregar el componente a tu objeto.
  • Modificar el “Fixed Timestep”: Modifica el tiempo entre actualizaciones del FixedUpdate()

Con eso terminamos nuestro blog de Rigidbody2D esperamos te haya sido útil.

Como siempre muchas gracias por leer nuestros blogs!!
Si te ha resultado útil este blog déjanos un comentario y síguenos en nuestro Instagram @tortugamedev y Twitter @Totuas2.
Y no olvides revisar nuestro otros blogs acerca del desarrollo de videojuegos, ni tampoco revisar nuestros juegos!!

BIBLIOGRAFÍA

Leave a Comment

Your email address will not be published.