Menu
CoddyTech

Gravidade e Massa

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 1 de 71.

Um Rigidbody entrega seu objeto à física do Unity, assim como aconteceu quando você adicionou um em Add a Component. A partir daí, a gravidade acelera o objeto em 9.81 m/s a cada segundo, e o Rigidbody tem as configurações que determinam como isso acontece. Duas delas são mass, em quilogramas (1 para um Rigidbody novo), e useGravity (ativado para um Rigidbody novo).

A massa não altera a velocidade com que as coisas caem. A gravidade puxa um corpo pesado com mais força, e é exatamente na mesma proporção que é mais difícil acelerar esse corpo pesado, então um caixote de 1 kg e uma bigorna de 50 kg soltos da mesma altura pousam no mesmo quadro. A massa importa quando os corpos empurram uns aos outros: a bigorna empurra o caixote para o lado, e o caixote quase não move a bigorna. Este balão de festa tem uma massa leve e não sofre a ação da gravidade, então fica suspenso onde a cena o colocou:

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

Com useGravity desativado, o balão ainda tem sua massa e ainda se move quando algo esbarra nele: apenas a gravidade deixa de puxá-lo. Defina-o novamente como true e a gravidade volta a puxá-lo de onde quer que o objeto esteja. A física do Unity também não tem ar, então uma pena cai como um tijolo, a menos que você dê ao Rigidbody um pouco de Amortecimento Linear.

challenge icon

Desafio

Fácil

Pendure as duas caixas e, em seguida, solte-as juntas ao pressionar Espaço.

  1. Em Start(), abaixo da linha GetComponent, defina rb.mass = weight; e rb.useGravity = false;.
  2. Em Update(), ao detectar Input.GetKeyDown(KeyCode.Space), defina rb.useGravity = true;.

Pressione “Jogar” e aperte Espaço: o cofre pesado e a caixa leve caem juntos. Em seguida, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

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

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Defina a massa como weight e impeça que a gravidade puxe o objeto
    }

    void Update()
    {
        // Space: deixe a gravidade puxar o objeto novamente
    }
}

Todas as lições de Física e Jogabilidade

Pratique por conta própria: Playground de Unity