Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

Escribe Window.cs: cada impacto debilita la ventana, que se rompe al llegar a 0.

  1. En OnCollisionEnter de la ventana, resta collision.relativeVelocity.magnitude a strength.
  2. Cuando strength <= 0f, llama a Destroy(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

Practica por tu cuenta: Playground de Unity