[RESOLU] Comprendre la fonction OnTriggerEnter ()

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

[RESOLU] Comprendre la fonction OnTriggerEnter ()

Message par TheParadox » 19 Juil 2017 16:31

Bonjour.

J'ai un problème que je ne comprend vraiment pas avec cette fonction...

J'ai un EmptyObject qui a plusieurs enfants.
Le premier (appelons le Coucou) possède un collider en mode Trigger. Les autres en possèdent aussi.
Coucou possède aussi un script, dans lequel j'utilise la fonction OnTriggerEnter pour tester si un objet le touche.
Si un objet se trouve dans son collider, une action est effectuée.
Le problème, c'est que l'action s'effectue aussi si l'objet touche les collider des autres enfants d'EmptyObject....
Cela signifie donc que la fonction OnTriggerEnter cible TOUS les colliders qui sont soit les enfant de Coucou, soit ses "frères", ou même ses "neveux"....

Pour être sûr que le problème vient de là, j'ai éloigné un de ses frère, et j'ai fais entrer un objet en collision avec lui.
Et bien l'action s'effectue quand même...

Je ne comprend vraiment pas pourquoi ça fait ça...
Je suppose qu'il doit y avoir un paramètre à rajouter pour préciser à la fonction de cibler seulement certains colliders, mais je n'en ai jamais attendu parlé...

Merci d'avance.
 ! Message de : boubouk50
J'ai changé le message de section ainsi que le titre, vu que le réel problème est l'utilisation de cet événement plutôt que le code en lui-même (qui d'ailleurs n'apparaît pas...)
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Comprendre la fonction OnTriggerEnter ()

Message par boubouk50 » 19 Juil 2017 16:49

La fonction OnTriggerEnter () sera appelée mais rien en t'empêche dans cette fonction de définir qui sera affecté ou non. Une simple condition pour savoir si une opération doit être effectuée ou non est généralement utilisée.
Tu peux tester le nom du gameObject, son tag ou encore son layer.
http://answers.unity3d.com/questions/79 ... ction.html

Tu peux également définir la physique entre layers et donc gérer les collisions en fonction de layer à la source:
https://docs.unity3d.com/Manual/LayerBa ... ision.html
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: Comprendre la fonction OnTriggerEnter ()

Message par TheParadox » 19 Juil 2017 17:07

Le problème ne vient pas de là....

Comme je l'ai dis dans mon premier message, Coucou et d'autres objets sont des enfant d'un EmptyObject.
Coucou possède un script. Dans ce script, avec cette fonction, je teste si un objet de la scène touche Coucou.
Si un objet touche Coucou, une action est effectuée.

Quand l'objet en question touche Coucou, l'action est bien effectuée.
Mais quand il touche un des autres enfants d'EmptyObject, elle s'effectue aussi.

Ce que je cherche à faire, c'est faire en sorte que la fonction ne s’exécute QUE si un objet touche Coucou.
Or là, elle s’exécute aussi quand cet objet touche un des frères de Coucou, ce qui est problématique.
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Comprendre la fonction OnTriggerEnter ()

Message par boubouk50 » 19 Juil 2017 17:40

TheParadox a écrit :
19 Juil 2017 17:07
Le problème ne vient pas de là....
S'il ne vient pas de là, il vient de quelque part entre la chaise et l'écran alors... Soit c'est toi qui t'exprimes mal ou qui ne comprends pas ma réponse, soit c'est moi qui ne voit pas le sens à ta question, qui pour moi est plutôt claire.

J'ai répondu au problème exposé, soit tu gères tes collisions par layer avec le LayerBasedCollision, c'est à dire que tu fais en sorte que Coucou ait un layer spécifique ainsi que celui avec lesquels il doit réagir et dans ce cas le trigger ne réagira qu'avec ceux définis (c’est bien ce que tu veux, non?), soit tu fais une condition dans ton script pour tester l'objet avec lequel il est entré en collision qui va déterminer si l'action doit être effectuée ou non et dans ce cas, OnTriggerEnter () est appelé mais la condition bloque les indésirables et donc Coucou réagira qu'avec ceux définis.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: Comprendre la fonction OnTriggerEnter ()

Message par TheParadox » 19 Juil 2017 18:18

Je n'avais pas bien compris sur le coup.

Le problème venait bien des layers.
En fait, j'avais un gros collider autour de mon objet. Du coup Coucou le détectait de loin.
J'ai juste ajouter et modifié des layers pour que Coucou ne prenne plus en compte ce collider.

Merci !
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Comprendre la fonction OnTriggerEnter ()

Message par boubouk50 » 20 Juil 2017 09:08

Si ton problème est résolu, merci d'ajouter [RESOLU] au début du titre du premier post.
Maintenant, tu peux aussi mettre un +1 à la réponse qui donne la solution.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Unity le logiciel »