Menu
CoddyTech

Rompersi all'impatto

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 10 di 71.

Quanto è stato forte l'urto? collision.relativeVelocity indica quanto velocemente i due oggetti si stavano avvicinando l'uno all'altro nel momento in cui si sono scontrati, e il suo magnitude è la velocità dell'impatto in m/s. È una differenza tra velocità: un'auto a 10 m/s che urta un'auto che procede nella stessa direzione a 8 m/s colpisce a soli 2 m/s, ed entrambe le auto rilevano la stessa velocità d'impatto.

Questo uovo si rompe quando atterra a una velocità superiore a crackSpeed. Lasciato cadere da 1 m, colpisce a circa 4,4 m/s (la radice quadrata di 2 x 9.81 x 1), mentre da 2 m colpisce a circa 6,3 m/s:

public float crackSpeed = 5f;

void OnCollisionEnter(Collision collision)
{
    if (collision.relativeVelocity.magnitude > crackSpeed)
    {
        Debug.Log("Splat!");
        Destroy(gameObject);
    }
}

Perché non usare rb.linearVelocity dell'uovo? Quando viene eseguito OnCollisionEnter, la fisica ha già gestito l'urto, quindi la velocità dell'uovo è quella rimasta dopo l'impatto, vicina a zero. relativeVelocity conserva la velocità dell'impatto stesso. È una velocità, quindi la massa non ha alcun ruolo: un uovo pesante e uno leggero che atterrano a 6 m/s indicano entrambi lo stesso valore, 6.

challenge icon

Sfida

Facile

Scrivi Window.cs: ogni impatto indebolisce la finestra, che si frantuma a 0.

  1. In OnCollisionEnter della finestra, sottrai collision.relativeVelocity.magnitude da strength.
  2. Quando strength <= 0f, chiama Destroy(gameObject);.

Premi «Gioca», fai rotolare palline piano con la freccia su, poi una forte con la barra spaziatrice: la finestra si rompe. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Window : MonoBehaviour
{
    public float strength = 10f;

    // Ogni colpo sottrae a strength la propria velocità d'impatto; quando strength arriva a 0, la finestra va in frantumi
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity