Page 1 sur 2

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

Publié : 05 Mars 2018 12:08
par starming
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é 4991 fois
Capture2.PNG
Capture2.PNG (23.38 Kio) Consulté 4991 fois

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

Publié : 26 Mars 2018 08:42
par starming
Aidez moi s'il vous plaît, je suis toujours coincé :?

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

Publié : 26 Mars 2018 09:57
par boubouk50
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.

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

Publié : 26 Mars 2018 10:05
par starming
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.

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

Publié : 26 Mars 2018 10:09
par starming
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.

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

Publié : 26 Mars 2018 10:18
par boubouk50
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.

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

Publié : 26 Mars 2018 10:25
par starming
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. :)

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

Publié : 26 Mars 2018 10:42
par boubouk50
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.

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

Publié : 26 Mars 2018 10:52
par starming
D'accord ça marche, je vais déjà voir pour le Debug.Drawline et puis je vais bosser pour mon Raycast

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

Publié : 26 Mars 2018 10:55
par starming
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).