[Resolu] Collider 2D dans monde 3D
[Resolu] Collider 2D dans monde 3D
Hello,
Je suis en train d'essayer de creer un FPS sur unity et après avoir coder un système d'arme qui tire des projectiles, j'aimerais développer mon système de visée.
Pour ce faire, j'ai créé un plan sur lequel j'ai placé une image de cible. l'idée est que lorsqu'un projectile est tirée dans le centre de la cible, je marque 50 points, et s'il est tiré en périphérie de la cible, je marque 1 point. Sur ce plan j'ai commencé à définir des "collider circle 2D" de différentes tailles afin de détecter où le projectile, que j'ai tiré via mon arme, impacte sur la cible. Bien évidemment il suffit de lire la doc pour savoir que les collider 2D ne fonctionnent qu'avec des éléments 2D, ce qui n'est pas le cas de mon projectile 3D...
Et heu du coup.. comment détecte on une collision entre un élément 2D et un élément 3D ?
Existe il un système tel que le Raycast qui permet de détecter la collision et d'avoir plein d'info sur cette dernière ?
Je suis en train d'essayer de creer un FPS sur unity et après avoir coder un système d'arme qui tire des projectiles, j'aimerais développer mon système de visée.
Pour ce faire, j'ai créé un plan sur lequel j'ai placé une image de cible. l'idée est que lorsqu'un projectile est tirée dans le centre de la cible, je marque 50 points, et s'il est tiré en périphérie de la cible, je marque 1 point. Sur ce plan j'ai commencé à définir des "collider circle 2D" de différentes tailles afin de détecter où le projectile, que j'ai tiré via mon arme, impacte sur la cible. Bien évidemment il suffit de lire la doc pour savoir que les collider 2D ne fonctionnent qu'avec des éléments 2D, ce qui n'est pas le cas de mon projectile 3D...
Et heu du coup.. comment détecte on une collision entre un élément 2D et un élément 3D ?
Existe il un système tel que le Raycast qui permet de détecter la collision et d'avoir plein d'info sur cette dernière ?
Dernière édition par Doucky le 09 Avr 2017 17:45, édité 1 fois.
Re: Collider 2D dans monde 3D
Je comprend pas trop, tu dit que tu fait un FPS et arrête moi si je me trompe, tu veux une cible pour tester ton système de tir, pourquoi ne pas prendre tout simplement un cube avec une texture de cible, pourquoi utiliser de la 2D, surtout dans un fps ?
Re: Collider 2D dans monde 3D
Et non on utilise pas les elements 2D et les elements 3D, prend juste un cylindre 3D avec une petite hauteur
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”
Re: Collider 2D dans monde 3D
Merci pour les réponses,
Twiixi : Admettons, disons que j'utilise un cube, sur l'une des face du cube, je peint une cible, le problème reste le même, comment détecte on l'endroit d'impact de la balle (projectile) sur la face du cube sur laquelle j'ai peint la cible ?
Evereal : tu as très bien saisi le problème. En ce qui concerne le cylindre de petite épaisseur, ce fut ma première idée mais le cylindre n'existe pas en forme primitive de collider. Et ceci car il est de loin non optimisé en terme de puissance de calcul (pour une cible ça va, mais si je veux répéter ce schéma sur d'autre partie de mon jeu plus tard cela sera ennuyeux).
A moins que tu me dises que l'on puisse designer soit même ses collider avec du code ?
Twiixi : Admettons, disons que j'utilise un cube, sur l'une des face du cube, je peint une cible, le problème reste le même, comment détecte on l'endroit d'impact de la balle (projectile) sur la face du cube sur laquelle j'ai peint la cible ?
Evereal : tu as très bien saisi le problème. En ce qui concerne le cylindre de petite épaisseur, ce fut ma première idée mais le cylindre n'existe pas en forme primitive de collider. Et ceci car il est de loin non optimisé en terme de puissance de calcul (pour une cible ça va, mais si je veux répéter ce schéma sur d'autre partie de mon jeu plus tard cela sera ennuyeux).
A moins que tu me dises que l'on puisse designer soit même ses collider avec du code ?
Re: Collider 2D dans monde 3D
Je n'ai pas le logiciel sous les yeux mais il existe dans l'API
https://docs.unity3d.com/ScriptReferenc ... inder.html
https://docs.unity3d.com/ScriptReferenc ... inder.html
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”
Re: Collider 2D dans monde 3D
Ajoute des collider en cercle de plus petite taille et met les par dessus les autres, ou fait des cylindre avec un trou au milieu pour les placer ou encore fait un système de bullet hole et regarde ou tu a tiré. Ou tu modélise une vraie cible avec chaque compartiment de ta cible comme un autre objet dans ton logiciel de 3d, et ensuite tu ajoute un mesh collider a tout les compartiment, j'ai pas d'autres idées.
- boubouk50
- ModoGenereux
- Messages : 6225
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Collider 2D dans monde 3D
Tu peux récupérer les coordonnées du point d'impact dans le RaycastHit que tu récupères par le Physics.Raycast (). La distance entre le centre de la cible et l'impact peut déterminer le nombre de points gagnés. Utilise seulement un MeshCollider sur ta cible.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Collider 2D dans monde 3D
C'est un bon moyen aussi (et le plus optimiser) mais il utilise des GO comme balle apparemment donc par raycast tu veux dire le placer devant la balle durant toute la traversé ?boubouk50 a écrit :Tu peux récupérer les coordonnées du point d'impact dans le RaycastHit que tu récupères par le Physics.Raycast (). La distance entre le centre de la cible et l'impact peut déterminer le nombre de points gagnés. Utilise seulement un MeshCollider sur ta cible.
- boubouk50
- ModoGenereux
- Messages : 6225
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Collider 2D dans monde 3D
Là, ça dépend de son système de tir (il ne l'a pas précisé), à savoir si le tir est droit ou non.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Collider 2D dans monde 3D
Yes ok merci pour toutes les informations, je vais me pencher sur ta façon de faire boubouk50 dans un premier temps.
Hé bien mon système de tir est relativement simple :
1. Je fais une ray qui par du centre de ma caméra FPS et qui va tout droit.
2. Ensuite je fais un Physic.raycast qui va me donner les informations du point de l'espace que je suis en train de regarder au centre de ma caméra FPS (sauf si je regarde le ciel qui n'est pas physique et donc non détecté).
3. Avec les coordonnées de ce point (que je regarde depuis ma vu FPS) et les coordonées de mon point où s'instancie la balle de mon arme (le muzzle), je peux en déduire une direction.
4. Lorsque j’instancie ma balle, je lui donne la direction précédemment calculée.
Je conçoit déjà un bugg dans cette façon de faire, c'est que lorsqu’un obstacle obstrue la sortie de mon arme mais que le centre de ma vu FPS vise un lieu plus lointain, la balle va s'exploser contre l'obstacle devant alors que je vise au loin... Mais je n'ai pas encore vérifié ce bugg
Merci, je vous retiens au courant si vos techniques fonctionnent
Hé bien mon système de tir est relativement simple :
1. Je fais une ray qui par du centre de ma caméra FPS et qui va tout droit.
2. Ensuite je fais un Physic.raycast qui va me donner les informations du point de l'espace que je suis en train de regarder au centre de ma caméra FPS (sauf si je regarde le ciel qui n'est pas physique et donc non détecté).
3. Avec les coordonnées de ce point (que je regarde depuis ma vu FPS) et les coordonées de mon point où s'instancie la balle de mon arme (le muzzle), je peux en déduire une direction.
4. Lorsque j’instancie ma balle, je lui donne la direction précédemment calculée.
Je conçoit déjà un bugg dans cette façon de faire, c'est que lorsqu’un obstacle obstrue la sortie de mon arme mais que le centre de ma vu FPS vise un lieu plus lointain, la balle va s'exploser contre l'obstacle devant alors que je vise au loin... Mais je n'ai pas encore vérifié ce bugg
Merci, je vous retiens au courant si vos techniques fonctionnent