Collider di trigger
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 15 di 63.
Un collider con Is Trigger selezionato 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, proprio come se si selezionasse 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 si rilevano mai a vicenda, che siano trigger o meno. Le guardie pattugliano tramite uno script, quindi ognuna ha un Rigidbody cinematico (Add Component, Rigidbody, Is Kinematic selezionato): la gravità e gli urti non influiscono su di essa, 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 privo di Rigidbody, quindi non viene registrato nulla neanche in questo caso. È sufficiente un solo Rigidbody nella coppia, su uno qualsiasi dei due oggetti. Nella prossima lezione vedrai other, il collider che è entrato.
Sfida
FacileIl Drone deve seguire un percorso attraverso tre anelli e ogni Ring deve registrare il proprio nome e passed mentre il drone lo attraversa, ad esempio Ring1 passed. Per ora non funziona nulla: lo script del drone lo fa volare usando MovePosition, ma nella scena non c'è alcun Rigidbody e gli anelli sono solidi.
- In
Drone.cs, assegna al drone un Rigidbody all'avvio del gioco e conservalo inbody. Il drone deve volare in piano lungo il suo percorso. Un solo corpo sul drone è sufficiente per tutti e tre gli anelli. - In
Ring.cs, imposta il collider di ogni anello come trigger all'avvio del gioco.
Premi Play e osserva la Console, poi Check.
Provalo tu
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// Rendi il collider di questo anello un trigger
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
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 rovescia2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere