Menu
CoddyTech

Colliders déclencheurs

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

Un collider dont la case Est un déclencheur est cochée n'est plus solide : les corps rigides le traversent, 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 déclencheurs. Dans le code, la case correspond à la propriété isTrigger du collider.

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

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

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

Les déclencheurs suivent la même règle que les collisions : Unity ne vérifie une paire que si au moins un des deux objets possède un Rigidbody. Deux objets qui n'en possèdent pas ne se signalent jamais l'un l'autre, qu'ils soient des déclencheurs ou non. Les gardes patrouillent grâce à un script, donc chacun possède un Rigidbody cinématique (Ajouter un composant, Rigidbody, case Is Kinematic cochée) : la gravité et les chocs n'ont aucun effet sur lui, et il compte tout de 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 consigné. Un seul Rigidbody dans la paire suffit, sur l'un ou l'autre des objets. La leçon suivante examine other, le collider qui est entré dans la zone.

challenge icon

Défi

Facile

Fais voler le drone à travers les anneaux, et laisse chaque anneau le signaler.

  1. Dans le Start() de Drone.cs, définis body = gameObject.AddComponent<Rigidbody>(); et body.isKinematic = true;, afin qu’il vole à l’horizontale.
  2. Dans le Start() de Ring.cs, définis GetComponent<Collider>().isTrigger = true;.

Appuie sur « Jouer » : le drone traverse les anneaux, et la Console affiche Ring1 passed, Ring2 passed et Ring3 passed. Puis clique sur « Vérifier ».

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");
    }
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity