[Unity] Programmare in C# – le funzioni OnTrigger
In Unity, i trigger sono una versione speciale di Collider
. Questi servono alla creazione di oggetti non tangibili, di cui però si vogliono comunque rilevare le collisioni. È il caso ad esempio di un gioco d’avventura (o piattaforme), in cui di solito si usano dei cubi invisibili per creare delle “aree interruttore” (trigger, appunto) in cui appena il personaggio vi entra, succede qualcosa (si chiude la porta dietro di lui, inizia una sfida, ecc.).
Per creare trigger, è necessario spuntare la casella Is Trigger nell’Inspector di un qualunque collider. Così facendo l’oggetto potrà compenetrare altri collider e non li spingerà via.
In più, i trigger non emettono i tre eventi OnCollisionEnter
, OnCollisionExit
, OnCollisionStay
, ma una versione speciale chiamata OnTriggerEnter, OnTriggerExit, OnTriggerStay. Le funzioni OnTrigger sono molto simili a quelle OnCollision, ma posseggono un parametro che non è di tipo Collision
ma Collider
(ovvero il collider che ha toccato l’oggetto). Per questo motivo contengono meno informazioni, ma sono anche più leggere da calcolare delle controparti OnCollision.
Ad esempio:
private void OnTriggerEnter(Collider otherCollider)
{
if(otherCollider.gameObject.tag == "Player")
{
GameManager.Instance.CloseTheDoor();
}
}
In questo esempio, usiamo OnTriggerEnter per rilevare quando
il giocatore entra in una stanza. Poiché il trigger potrebbe scattare
anche nel caso in cui un nemico o un proiettile passi la porta, nella
funzione leggiamo la proprietà otherCollider.gameObject.tag
dell’altro oggetto per chiamare CloseDoor solo se è il giocatore ad entrare.
Così come per i collider normali, le funzioni OnTrigger effettuano queste azioni solo se almeno uno dei due oggetti coinvolti nello scontro possiede un Rigidbody ‘non kinematic’ (che vedremo nella prossima lezione sui Rigidbody).
Per approfondire l’argomento, qui troverete un tutorial molto interessante creato sul sito ufficiale di Unity.