Menu
CoddyTech

Gravedad y masa

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 1 de 71.

Un componente Rigidbody entrega su objeto a la física de Unity, igual que cuando añadiste uno en Add a Component. A partir de entonces, la gravedad acelera el objeto 9.81 m/s cada segundo, y el Rigidbody tiene ajustes que determinan cómo. Dos de ellos son mass, en kilogramos (1 para un Rigidbody nuevo), y useGravity (activado para un Rigidbody nuevo).

La masa no cambia la rapidez con la que caen las cosas. La gravedad tira con más fuerza de un cuerpo pesado, y cuesta exactamente lo mismo acelerar el cuerpo pesado, así que una caja de 1 kg y un yunque de 50 kg que se dejan caer desde la misma altura aterrizan en el mismo fotograma. La masa importa cuando los cuerpos se empujan entre sí: el yunque aparta la caja, y la caja apenas mueve el yunque. Este globo de fiesta tiene una masa ligera y la gravedad lo deja en paz, así que queda suspendido donde lo colocó la escena:

void Start()
{
    Rigidbody rb = GetComponent<Rigidbody>();
    rb.mass = 0.2f;
    rb.useGravity = false;
}

Con useGravity desactivado, el globo sigue teniendo masa y sigue moviéndose cuando algo choca con él: solo deja de actuar la gravedad. Vuelve a establecerlo en true y la gravedad vuelve a tirar de él desde donde esté el objeto. En la física de Unity tampoco hay aire, así que una pluma cae como un ladrillo, a menos que le des a su Rigidbody algo de amortiguación lineal.

challenge icon

Desafío

Fácil

Cuelga las dos cajas y luego suéltalas juntas al pulsar la barra espaciadora.

  1. En Start(), debajo de la línea GetComponent, establece rb.mass = weight; y rb.useGravity = false;.
  2. En Update(), cuando se pulse Input.GetKeyDown(KeyCode.Space), establece rb.useGravity = true;.

Pulsa «Jugar» y pulsa la barra espaciadora: la caja fuerte pesada y la caja ligera aterrizan juntas. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

public class CraneLoad : MonoBehaviour
{
    public float weight = 1f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Establece la masa en weight y desactiva la gravedad
    }

    void Update()
    {
        // Space: permite que la gravedad vuelva a actuar
    }
}

Todas las lecciones de Física y jugabilidad

Practica por tu cuenta: Playground de Unity