Menu
CoddyTech

Collider trigger

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

Un collider con la casella È un trigger selezionata non è più solido: i corpi rigidi lo attraversano e Unity segnala invece la sovrapposizione chiamando OnTriggerEnter negli script di entrambi gli oggetti. Le linee di arrivo, gli oggetti da raccogliere e le zone pericolose sono trigger. Nel codice, la casella corrisponde alla proprietà isTrigger del collider.

La zona d’allarme di questo caveau imposta il collider come trigger all’avvio del gioco, come se selezionassi la casella, e fa scattare l’allarme quando una guardia vi entra:

void Start()
{
    GetComponent<Collider>().isTrigger = true;
}

void OnTriggerEnter(Collider other)
{
    Debug.Log("Alarm!");
}

I trigger seguono la stessa regola delle collisioni: Unity controlla una coppia solo quando almeno uno dei due oggetti ha un Rigidbody. Due oggetti senza Rigidbody non rilevano mai l’uno la presenza dell’altro, che siano trigger oppure no. Le guardie pattugliano tramite uno script, quindi ognuna ha un Rigidbody cinematico (Aggiungi componente, Rigidbody, casella Is Kinematic selezionata): la gravità e gli urti non lo influenzano, ma conta comunque come Rigidbody. Senza i Rigidbody delle guardie, una guardia attraversa la zona e la Console rimane vuota. Senza isTrigger, la zona è una scatola solida e un corpo cinematico non tocca mai un collider che non ha un Rigidbody, quindi non viene registrato nulla. Basta un Rigidbody nella coppia, su uno qualsiasi dei due oggetti. La prossima lezione esamina other, il collider che è entrato.

challenge icon

Sfida

Facile

Fai volare il drone attraverso gli anelli e lascia che ogni anello lo segnali.

  1. In Drone.cs, in Start(), imposta body = gameObject.AddComponent<Rigidbody>(); e body.isKinematic = true;, così volerà in piano.
  2. In Ring.cs, in Start(), imposta GetComponent<Collider>().isTrigger = true;.

Premi «Gioca»: il drone vola attraverso gli anelli e la Console mostra Ring1 passed, Ring2 passed e Ring3 passed. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // Imposta il collider di questo anello come trigger
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(name + " passed");
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity