Un collider est une forme géométrique invisible que l’on ajoute à la forme d’un objet afin qu’il puisse entrer en collision avec un autre objet. Il peut être de plusieurs formes : Box, Sphere, Capsule, Mesh, etc.
Lien vers la doc Unity : Box Collider
Edit Collider : Permet de changer la forme du collider. (Indiqué en vert clair)
Material : Il est possible d’ajouter un Physics Material sur le Collider.
(Lien vers la doc Unity : ici)
Une fois créé, ce Physics Material peut vous permettre de rendre votre objet plus sensible à deux paramètres :
IsTrigger: Lorsque cette case est cochée, le collider n’enregistre plus les collisions, mais agit comme un déclencheur. Ce déclencheur envoie un message à un script correspondant. (Cf. Trigger Enter / Exit plus bas)
Center : La position du collider par rapport à l’élément sur lequel il est.
Size : La taille du collider.
Le Trigger est une fonction très importante dans la conception de jeu vidéo.
Par exemple il peut servir de déclencheur pour les cas suivants :
Exemple de code qui détruira l’objet contre lequel le joueur entrera en collision et qui va activer un système de particule :
Lien vers la doc Unity : TriggerEnter
IsTrigger: Lorsque cette case est cochée sur un collider, le collider n’enregistre plus les collisions, mais agit comme un déclencheur. Ce déclencheur envoie un message à un script correspondant.
Afin que le Trigger Enter / Exit fonctionne :
L’objet qui sera touché par le joueur, doit avoir un collider, avec l’option is Trigger cochée.
Quand un objet est en mode Trigger, il n’est plus solide, c’est juste un volume. Détecter le trigger c’est un peu comme mettre sa main dans de l’eau, on peut facilement dire “Ma main est mouillée”. Quand on a un objet en mode Trigger, on utilise la fonction OnTriggerEnter().
Quand un objet n’est pas en mode Trigger, il est solide. Détecter la collision peut permettre de calculer les forces. Par exemple, si on rentre dans un mur est-ce qu’on a suffisamment de force pour casser le mur ou est-ce qu’on se fait très mal. Quand on a un objet qui n’est pas en mode Trigger, on utilise la fonction OnCollissionEnter().
Pour utiliser les collision il faut bien faire attention à prendre un contrôleur avec un RigidBody car sans RigidBody, pas de physique.
On va avoir deux manières de gérer les collisions suivant le type de collider de l’objet avec lequel on veut rentrer en collision :
On va écrire ces void en dehors des void Start et Update :
Void indique une fonction qui ne ‘renvoie rien’. Une fonction, comme tu as pu le voir en Python est un bout de code qui va faire quelque chose et dans la majorité du temps retourner un résultat. On peut par exemple créer une fonction qui fait des multiplications et qui nous retourne le résultat. Un Void ne va pas retourner de résultat mais va faire des actions quand il s’active. Par exemple, avec le void pour la collision, on peut supprimer un objet s’il rentre en collision avec un autre objet !
Quand on rentre en collision, la première chose que l’on va faire, c’est regarder l’objet avec lequel on rentre en collision. On ne va pas faire la même chose si on touche un ennemi ou un objet à récupérer. On va donc utiliser les conditions pour regarder qui on touche et c’est à ça que sert le ‘Collision’ (ou ‘Collider’ pour Trigger) entre parenthèses !
Pour regarder l’objet avec lequel on rentre en collision, on regarde son tag !
Par exemple, si l’objet avec lequel on rentre en collision porte le tag ‘ennemi’, on va détruire l’objet sur lequel est le script !
Si je place mon script sur le FPSController et que je rentre en collision avec un objet (ici ma sphère) qui porte le tag ‘ennemi’ et dont le collider est en mode ‘Trigger’, mon FPSController disparaît de la scène comme voulu !
Attention : Le FPS Controller ne détecte pas toujours les collisions avec le Void OnCollisionEnter(). Tu peux faire plusieurs choses pour y remédier :