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.
Sfida
FacileScrivi Window.cs: ogni impatto indebolisce la finestra, che si frantuma a 0.
- In
OnCollisionEnterdella finestra, sottraicollision.relativeVelocity.magnitudedastrength. - Quando
strength <= 0f, chiamaDestroy(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
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta10Progetto: Fuga dall'arena
L'arenaCacciatori2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliereEsercitati da solo: Playground Unity