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.
Défi
FacileFais voler le drone à travers les anneaux, et laisse chaque anneau le signaler.
- Dans le
Start()deDrone.cs, définisbody = gameObject.AddComponent<Rigidbody>();etbody.isKinematic = true;, afin qu’il vole à l’horizontale. - Dans le
Start()deRing.cs, définisGetComponent<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
1Corps rigide
Gravité et massePousser avec AddForceSauter avec une impulsionFixedUpdate pour la physiqueVitesseCorps cinématiquesRécapitulatif : plateforme de lancement4Coroutines
InvoquerInvokeRepeating, CancelInvokeVotre première coroutineBoucles dans les coroutinesArrêter les coroutinesRécapitulatif : compte à rebours7Rotation
Angles d’EulerQuaternionsRegardez dans la direction où vous vous déplacezTourner en douceurRécapitulatif : tourelle10Projet : Évasion de l’arène
L’arèneLes chasseurs2Collisions
OnCollisionEnterQu’est-ce que j’ai touché ?Se briser à l’impactRester au solRebond et frictionFormes des collidersRécapitulatif : mur destructible5Projet : Course aux pièces
La balle roulanteDes pièces à ramasser3Déclencheurs
Colliders déclencheursOnTriggerEnterObjets à ramasserLes caisses gardent le resteZones mortellesEntrée et sortieRécapitulatif : clé et porteEntraînez-vous par vous-même : Playground Unity