[VR] Détecter une collision entre un laser et une sphère

Section dédiée à la VR avec Unity

Modérateur : Administrateurs Suppléants

starming
Messages : 9
Inscription : 05 Mars 2018 11:52

[VR] Détecter une collision entre un laser et une sphère

Message par starming » 05 Mars 2018 12:08

Bonjour, j'ai un problème pour un projet personnel, j'utilise la VR avec un casque vive.
Ma caméra est située au centre d'une sphère (à l'intérieur) et avec les manettes de l'HTC Vive, je cherche à ce que quand j'appuie sur un bouton, cela place une sphère à l'endroit de la collision entre le laser de la manette (j'utilise le pointerlaser de Steam_VR) et la paroi intérieure de la grande sphère (j'ai déjà posé un collider pour les parois intérieures). J'ai utilisé plein de sortes de codes différents comme OnColliderEnter (malheureusement ça ne marche pas) ou alors Raycast mais je ne maîtrise pas assez ce dernier. Vous trouverez mon code ci-dessous. Je code en C# et j'ai vraiment besoin d'aide, si je n'ai pas été assez clair dans mon problème n’hésitez pas a demander. Merci d'avance à tous ceux qui seront la :)
Capture.PNG
Capture.PNG (31.93 Kio) Consulté 529 fois
Capture2.PNG
Capture2.PNG (23.38 Kio) Consulté 529 fois

starming
Messages : 9
Inscription : 05 Mars 2018 11:52

Re: [VR] Détecter une collision entre un laser et une sphère

Message par starming » 26 Mars 2018 08:42

Aidez moi s'il vous plaît, je suis toujours coincé :?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4650
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [VR] Détecter une collision entre un laser et une sphère

Message par boubouk50 » 26 Mars 2018 09:57

Je pense que le Raycast est la solution à utiliser.
Soit sur tout de même que tu vises bien la sphère uniquement.
Aussi, tu as un paramètre de distance dans le Raycast (100). Es-tu sur que tu atteins la sphère?
N'hésite pas à mettre des Debug.Log () pour voir la progression. (nom du hit, par ex. Position, etc)
As-tu des erreurs? Que se passe-t-il quand tu cliques? Entres-tu bien dans le code?

Il ne suffit pas juste de mettre ton code, explique ce qui se passe également, merci.
"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

starming
Messages : 9
Inscription : 05 Mars 2018 11:52

Re: [VR] Détecter une collision entre un laser et une sphère

Message par starming » 26 Mars 2018 10:05

boubouk50 a écrit :
26 Mars 2018 09:57
Je pense que le Raycast est la solution à utiliser.
Soit sur tout de même que tu vises bien la sphère uniquement.
Aussi, tu as un paramètre de distance dans le Raycast (100). Es-tu sur que tu atteins la sphère?
N'hésite pas à mettre des Debug.Log () pour voir la progression. (nom du hit, par ex. Position, etc)
As-tu des erreurs? Que se passe-t-il quand tu cliques? Entres-tu bien dans le code?

Il ne suffit pas juste de mettre ton code, explique ce qui se passe également, merci.
Merci de ta réponse,
Je suis sur d'atteindre ma sphère, j'avais mit un Debug.log pour m'en assurer, mais désormais lorsque je clique, une petite sphère apparaît de manière random alors que j'aimerais qu'elle apparaissent à l'endroit de la collision. Je n'ai pas d'erreurs, après je suis en projet 72h et j'utilise donc des PC sur un reseau de lycée ce qui m'enpêche d'avoir internet sur Unity, serait-ce la version que je dispose qui est mauvaise et pleines de bugs? J'avais entendu parler que Raycast avec quelques problèmes parfois.

starming
Messages : 9
Inscription : 05 Mars 2018 11:52

Re: [VR] Détecter une collision entre un laser et une sphère

Message par starming » 26 Mars 2018 10:09

Pour t'expliquer plus précisement, je travaille sur un projet de scanner 3D pour scène de crime, une image 360 sera prise et importer sur une sphère où l'on verra l'image de l'intérieur. Désormais je cherche à ce que lorsque que j'appuie sur un bouton de manette, une petite sphère se créer à l'endroit où il y a aura collision entre le laser de la manette et la grande Sphere principale. La petite sphère représente un indice.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4650
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [VR] Détecter une collision entre un laser et une sphère

Message par boubouk50 » 26 Mars 2018 10:18

starming a écrit :
26 Mars 2018 10:05
Je n'ai pas d'erreurs, après je suis en projet 72h et j'utilise donc des PC sur un reseau de lycée ce qui m'enpêche d'avoir internet sur Unity, serait-ce la version que je dispose qui est mauvaise et pleines de bugs? J'avais entendu parler que Raycast avec quelques problèmes parfois.
Enlève-toi ça directement de la tête :roll: . Unity est capable de sortir des jeux AAA, si tu as une erreur pour quelque chose d'aussi simple, c'est un problème d'algorithmie ou de programmation, pas du moteur. Ça n'avance à rien de rejeter les tords sur le moteur.
Je ne te dis pas ça pour t'engueuler, hein, mais parce que c'est pas une bonne façon de travailler pour avancer. La remise en question de ton code est primordiale pour te sortir des impasses que tu rencontreras.
Il va falloir faire des tests au niveau des transforms de tes petites sphères. Assure-toi que le hit point est correct et le même que la position que tu vas donner.
Tu peux utiliser aussi le Debug.Drawline pour visualiser le raycast.
Il se peut qu'un transform soit local/global et que tu l'assignes en global/local. Il se peut que le Raycast ne soit pas bon. Il se peut que ton pivot de l'indice ne soit pas centré. Etc. Il faut affiner la recherche de l'erreur pour la trouver.
"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

starming
Messages : 9
Inscription : 05 Mars 2018 11:52

Re: [VR] Détecter une collision entre un laser et une sphère

Message par starming » 26 Mars 2018 10:25

Je comprend, après je t'avoue que ça fait que 3-4 mois que je touche à Unity et que je suis donc débutant.
J'essaie de voir les erreurs du programme, je pense que c'est mon système de hit point qui est mauvais, connaîtrais tu juste une sorte de programme pour connaître la coordonnée d'une collision, cela m'aiderais énormément. :)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4650
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [VR] Détecter une collision entre un laser et une sphère

Message par boubouk50 » 26 Mars 2018 10:42

Pas besoin de réinventer la roue. Le RayCast () fonctionne très bien.
Un Raycast, un point de collision et c'est tout ce dont tu as besoin.
Dans ton code:

Code : Tout sélectionner

indice.position = hitPoint + indiceReticleOffset;
Ton objet est donc à un autre endroit que le hit à cause de l'offset. Si tu veux appliquer un offset de profondeur, il faut qu'il soit en fonction du vecteur de "tir" et non pas fixe.
la condition GetPressUp () est dans GetPressed () ne devrait-elle pas être externe? Je ne suis pas sur que les deux coexistent.
"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

starming
Messages : 9
Inscription : 05 Mars 2018 11:52

Re: [VR] Détecter une collision entre un laser et une sphère

Message par starming » 26 Mars 2018 10:52

D'accord ça marche, je vais déjà voir pour le Debug.Drawline et puis je vais bosser pour mon Raycast

starming
Messages : 9
Inscription : 05 Mars 2018 11:52

Re: [VR] Détecter une collision entre un laser et une sphère

Message par starming » 26 Mars 2018 10:55

boubouk50 a écrit :
26 Mars 2018 10:42
Pas besoin de réinventer la roue. Le RayCast () fonctionne très bien.
Un Raycast, un point de collision et c'est tout ce dont tu as besoin.
Dans ton code:

Code : Tout sélectionner

indice.position = hitPoint + indiceReticleOffset;
Ton objet est donc à un autre endroit que le hit à cause de l'offset. Si tu veux appliquer un offset de profondeur, il faut qu'il soit en fonction du vecteur de "tir" et non pas fixe.
la condition GetPressUp () est dans GetPressed () ne devrait-elle pas être externe? Je ne suis pas sur que les deux coexistent.
Je vais voir sans le reticle alors, et oui cela est normal, il faut presser les 2 boutons en même temps pour que çela marche (c'est 2 boutons différents).

Répondre

Revenir vers « Unity et la VR »