Menu
CoddyTech

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.

challenge icon

Sfida

Facile

La piastra a pressione conta ciò che vi atterra sopra.

  1. Aggiungi un campo private int presses; a PressurePlate.
  2. Aggiungi void OnCollisionEnter(Collision collision): incrementa presses di 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

Esercitati da solo: Playground Unity