Romper al impactar
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 10 de 71.
¿Qué tan fuerte fue el golpe? collision.relativeVelocity indica qué tan rápido se acercaban los dos objetos entre sí en el momento del impacto, y su magnitude es la velocidad del impacto en m/s. Es una diferencia de velocidades: un coche que va a 10 m/s y choca contra otro que va en la misma dirección a 8 m/s recibe un golpe de solo 2 m/s, y ambos coches registran la misma velocidad de impacto.
Este huevo se rompe cuando cae a una velocidad superior a crackSpeed. Si se deja caer desde 1 m, impacta a unos 4.4 m/s (la raíz cuadrada de 2 x 9.81 x 1), y desde 2 m, a unos 6.3 m/s:
public float crackSpeed = 5f;
void OnCollisionEnter(Collision collision)
{
if (collision.relativeVelocity.magnitude > crackSpeed)
{
Debug.Log("Splat!");
Destroy(gameObject);
}
}¿Por qué no usar la propia rb.linearVelocity del huevo? Cuando se ejecuta OnCollisionEnter, la física ya ha procesado el impacto, así que la velocidad del huevo es la que queda después, cercana a cero. relativeVelocity conserva la velocidad del impacto en sí. Es una velocidad, así que la masa no influye: un huevo pesado y uno ligero que caen a 6 m/s registran ambos 6.
Desafío
FácilEscribe Window.cs: cada impacto debilita la ventana, que se rompe al llegar a 0.
- En
OnCollisionEnterde la ventana, restacollision.relativeVelocity.magnitudeastrength. - Cuando
strength <= 0f, llama aDestroy(gameObject);.
Pulsa «Jugar», lanza bolas suavemente con la flecha hacia arriba y después una con fuerza con la barra espaciadora: la ventana se rompe. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class Window : MonoBehaviour
{
public float strength = 10f;
// Cada golpe resta su velocidad de impacto a strength; cuando llega a 0, la ventana se rompe
}
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