Menu
CoddyTech

Colliders déclencheurs

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 15 sur 63.

Un collider dont la case Is Trigger est cochée n’est plus solide : les Rigidbody le traversent directement, et Unity signale plutôt le chevauchement en appelant OnTriggerEnter dans les scripts des deux objets. Les lignes d’arrivée, les objets à ramasser et les zones dangereuses sont des triggers. Dans le code, la case correspond à la propriété isTrigger du collider.

La zone d’alarme de ce coffre-fort transforme son collider en trigger au démarrage du jeu, ce qui revient à cocher la case, et déclenche l’alarme lorsqu’un garde entre dans la zone :

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

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

Les triggers suivent la même règle que les collisions : Unity ne vérifie une paire que si au moins l’un des deux objets possède un Rigidbody. Deux objets qui n’en ont pas ne se signalent jamais mutuellement, qu’ils soient des triggers ou non. Les gardes patrouillent grâce à un script, donc chacun possède un Rigidbody cinématique (Add Component, Rigidbody, Is Kinematic coché) : la gravité et les chocs ne le déplacent pas, mais il compte quand même comme un Rigidbody. Sans les Rigidbody des gardes, un garde traverse la zone et la Console reste vide. Sans isTrigger, la zone est une boîte solide, et un corps cinématique ne touche jamais un collider qui n’a pas de Rigidbody ; là encore, rien n’est enregistré. Un seul Rigidbody dans la paire suffit, sur l’un ou l’autre objet. La prochaine leçon porte sur other, le collider qui est entré dans la zone.

challenge icon

Défi

Facile

Le Drone doit suivre un parcours passant par trois anneaux, et chaque Ring doit afficher son nom et passed dans le journal lorsque le drone le traverse, par exemple Ring1 passed. Rien ne fonctionne pour l’instant : le script du drone le fait voler avec MovePosition, mais aucun objet de la scène n’a de Rigidbody, et les anneaux sont solides.

  • Dans Drone.cs, ajoute un Rigidbody au drone au démarrage du jeu et conserve-le dans body. Le drone doit voler à altitude constante le long de son parcours. Un seul Rigidbody sur le drone suffit pour les trois anneaux.
  • Dans Ring.cs, configure le collider de chaque anneau comme déclencheur au démarrage du jeu.

Appuie sur Play et observe la Console, puis clique sur Check.

Essayez vous-même

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // Faites du collider de cet anneau un déclencheur
    }

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

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Physique et gameplay