Ressources Magic Makers

 

Site en maintenance

 
Nous sommes actuellement entrain de mettre à jour les ressources de ce site.
Pendant la mise à jour vous pouvez retrouver tous les nouveaux contenus sur le site
 

https://lp-magicmakers.fr/

 
 

Collision

Le composant Collider

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 :

    • Friction : Coefficient de résistance au mouvement de votre objet. 
    • Bounciness (Rebond) : Coefficient de rebond de votre objet.

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.

Trigger Enter / Exit

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 :

    • Ajouter un effet (son ou particule) lors de la destruction d’un objet avec lequel le joueur rentre en collision. 
    • Augmenter un score après avoir “récupéré un objet”.
    • Activer un effet à distance.

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 :

    • Le joueur doit avoir un Rigidbody et un Collider. 
    • Le joueur doit avoir un Script où la fonction OnTriggerEnter // OnTriggerExit  est appelée, avec l’action correspondante (Destroy() / ParticleSystem.Play() / AudioClip.Play() / …)

L’objet qui sera touché par le joueur, doit avoir un collider, avec l’option is Trigger cochée.

La différence entre Trigger et Collision

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.

Les collisions

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 :

    • Tu peux utiliser le void OnTriggerEnter() à la place (cf ci-dessus) qui fonctionne correctement
    • Tu peux ajouter un ‘Capsule Collider’ à ton joueur et ajouter un ‘Rigidbody’ au GameObject avec lequel tu rentres en collision. Sur ce ‘Rigidbody’, il faut que tu passes le paramètre ‘Collision Detection’ à ‘Continous’ et si tu ne veux pas qu’il bouge, il faut aussi ‘freeze’ toutes les positions et rotations
    • Tu peux utiliser le ‘Void OnControllerColliderHit (ControllerColliderHit collision)’ à la place de ‘Void OnCollisionEnter (Collision collision). Ce Void fonctionne avec le ‘Character Controller’ présent sur le FPS Controller.