Menu
CoddyTech

Empurrar com AddForce

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

Depois que um objeto tem um Rigidbody, a física o movimenta, então você para de alterar sua posição e, em vez disso, o empurra. rb.AddForce(force) empurra o corpo com uma força, um Vector3 em newtons. Uma força não define uma velocidade: ela acelera o corpo enquanto você continuar aplicando-a, aumentando a velocidade a cada segundo em uma quantidade igual à força dividida pela massa. Pare de empurrar e o corpo mantém a velocidade que tem.

Este hovercraft (2 kg) tem um propulsor: enquanto a seta para cima estiver pressionada, uma força de thrust o empurra para a frente, ao longo de +z. Com um impulso de 12, ele ganha 12 / 2 = 6 m/s a cada segundo:

public float thrust = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.UpArrow))
    {
        rb.AddForce(Vector3.forward * thrust);
    }
}

As forças são aplicadas em FixedUpdate(), que o Unity chama antes de cada etapa da física, 50 vezes por segundo (a lição 4 explica o motivo). Não há Time.deltaTime nessa linha: AddForce já distribui a força pela etapa, e multiplicá-la por Time.deltaTime deixaria o empurrão 50 vezes mais fraco. No chão, o atrito empurra na direção contrária, então uma força pequena pode não mover uma caixa pesada de jeito nenhum.

challenge icon

Desafio

Fácil

Empurre o disco pelo rinque sem atrito usando forças.

  1. Em FixedUpdate(), leia float h = Input.GetAxis("Horizontal"); e float v = Input.GetAxis("Vertical");.
  2. Chame rb.AddForce(new Vector3(h, 0, v) * push);, sem Time.deltaTime.

Pressione “Jogar”, empurre e solte: o disco continua deslizando. Depois, “Verificar”.

Experimente você mesmo

using UnityEngine;

public class PuckPusher : MonoBehaviour
{
    public float push = 4f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Empurre o disco: Horizontal ao longo de x, Vertical ao longo de z
    }
}

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

Pratique por conta própria: Playground de Unity