Menu
CoddyTech

Empujar con AddForce

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

Una vez que un objeto tiene un Rigidbody, la física lo mueve, así que dejas de cambiar su posición y, en su lugar, lo empujas. rb.AddForce(force) empuja el cuerpo con una fuerza, un Vector3 en newtons. Una fuerza no establece una velocidad: acelera el cuerpo mientras sigas aplicándola, a razón de la fuerza dividida por la masa cada segundo. Deja de empujarlo y el cuerpo mantiene la velocidad que tiene.

Este aerodeslizador (2 kg) tiene un propulsor: mientras se mantiene pulsada la flecha hacia arriba, una fuerza de thrust lo empuja hacia delante, a lo largo de +z. Con un empuje de 12, gana 12 / 2 = 6 m/s 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);
    }
}

Las fuerzas se aplican en FixedUpdate(), que Unity llama antes de cada paso de física, 50 veces por segundo (la lección 4 explica por qué). En esa línea no aparece Time.deltaTime: AddForce ya distribuye la fuerza a lo largo del paso, y multiplicarla por Time.deltaTime haría que el empuje fuera 50 veces más débil. En el suelo, la fricción empuja en sentido contrario, así que una fuerza pequeña quizá no mueva en absoluto una caja pesada.

challenge icon

Desafío

Fácil

El disco sobre la pista de hielo tiene un Rigidbody y el hielo no tiene fricción. Empújalo con las flechas: el eje Horizontal lo empuja a lo largo de x y el eje Vertical a lo largo de z, con una fuerza de push (4 en el Inspector).

Empújalo solo con fuerzas, para que siga deslizándose cuando sueltes las teclas. Pulsa Play, guía el disco por la pista y después pulsa Check.

Pruébalo tú mismo

using UnityEngine;

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

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

    void FixedUpdate()
    {
        // Empuja el disco: Horizontal a lo largo de x, Vertical a lo largo de z
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad