Empujar con AddForce
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 2 de 71.
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 medida 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 conserva la velocidad que tiene.
Este aerodeslizador (2 kg) tiene un propulsor: mientras se mantenga pulsada la flecha hacia arriba, una fuerza de thrust lo empuja hacia delante, a lo largo del eje +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é). No se usa Time.deltaTime en esa línea: 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.
Desafío
FácilEmpuja el disco por la pista sin fricción usando fuerzas.
- En
FixedUpdate(), leefloat h = Input.GetAxis("Horizontal");yfloat v = Input.GetAxis("Vertical");. - Llama a
rb.AddForce(new Vector3(h, 0, v) * push);, sinTime.deltaTime.
Pulsa «Jugar», empuja y suelta: el disco sigue deslizándose. Después, pulsa «Comprobar».
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
}
}
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity