OnCollisionEnter
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 8 di 71.
Quando due collider iniziano a toccarsi, Unity chiama OnCollisionEnter(Collision collision) negli script di entrambi gli oggetti. Viene chiamato una sola volta, nel passo fisico in cui inizia il contatto, e non di nuovo mentre rimangono a contatto. Perché avvenga una collisione, almeno uno dei due deve avere un Rigidbody mosso dalla fisica: una parete e un pavimento senza Rigidbody non si segnalano mai nulla a vicenda.
Questa cassa registra un messaggio quando atterra. Ha un Rigidbody, quindi cade, e il messaggio arriva nel passo in cui incontra il pavimento:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Thud!");
}La cassa registra un messaggio una volta, e di nuovo soltanto dopo aver lasciato il pavimento ed essere atterrata una seconda volta. Anche il pavimento riceve il messaggio: uno script su di esso rileverebbe l'atterraggio della cassa, anche se il pavimento non ha un Rigidbody. Il nome e il parametro devono essere esatti. Un metodo chiamato onCollisionEnter non viene mai chiamato e non genera alcun errore. Se il metodo accetta un Collider, Unity registra Script error: OnCollisionEnter con This message parameter has to be of type: Collision e lo ignora. Mentre i due rimangono a contatto, Unity chiama OnCollisionStay a ogni passo fisico; quando si separano, chiama OnCollisionExit una volta.
Sfida
FacileLa piastra a pressione conta ciò che vi atterra sopra.
- Aggiungi un campo
private int presses;aPressurePlate. - Aggiungi
void OnCollisionEnter(Collision collision): incrementapressesdi 1 e registra"Pressed " + presses.
Premi «Gioca»: la cassa atterra e la Console mostra Pressed 1, una sola volta. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// Conta ogni atterraggio e registralo nel log: Pressed 1, Pressed 2, ...
}
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