Vive Tracker à l'envers dans Unity
Vive Tracker à l'envers dans Unity
Bonjour,
Dans mon projet Unity, il y a un problème qui me tracasse depuis un certain temps, et je n'arrive pas à le résoudre :
Comme vous pouvez le voir. L'objet que je track à l'aide des Vive Tracker 3.0 est à l'envers.
Pourtant je vous assure que l'objet dans la vraie vie est à l'endroit. Le tracker est également bien positionné par rapport à la vie réelle.
Cependant, voici mon objet en mode "Scène" lorsque je ne lance pas mon jeu, comme vous pouvez le voir, il est à l'endroit : (Le carré rouge représente le tracker, car j'ai compris qu'il ne faut pas déplacer le tracker, mais déplacer l'objet pour le positionner dessus) :
Pourquoi l'objet est-il à l'envers ? Est-il possible que ce soit le "vrai" tracker qui soit à l'envers ?
(Et question bonus ^^ : Est-il possible de changer de place les tracker dans Unity en Scène ? C'est-à-dire changer leur position X, Y et Z dans Unity pour laisser l'objet en 0 / 0 / 0 et mettre le tracker au même endroit que dans la vraie vie ?)
Ma carte est, je pense, à l'endroit parce que le ciel est bien "en haut".
Je tiens à préciser que je ne mettrais pas simplement l'arme à l'envers dans le mode scène. J'aimerais qu'il soit correctement positionné pour faciliter les futures étapes de création.
Merci d'avance pour vos réponses.
Dans mon projet Unity, il y a un problème qui me tracasse depuis un certain temps, et je n'arrive pas à le résoudre :
Comme vous pouvez le voir. L'objet que je track à l'aide des Vive Tracker 3.0 est à l'envers.
Pourtant je vous assure que l'objet dans la vraie vie est à l'endroit. Le tracker est également bien positionné par rapport à la vie réelle.
Cependant, voici mon objet en mode "Scène" lorsque je ne lance pas mon jeu, comme vous pouvez le voir, il est à l'endroit : (Le carré rouge représente le tracker, car j'ai compris qu'il ne faut pas déplacer le tracker, mais déplacer l'objet pour le positionner dessus) :
Pourquoi l'objet est-il à l'envers ? Est-il possible que ce soit le "vrai" tracker qui soit à l'envers ?
(Et question bonus ^^ : Est-il possible de changer de place les tracker dans Unity en Scène ? C'est-à-dire changer leur position X, Y et Z dans Unity pour laisser l'objet en 0 / 0 / 0 et mettre le tracker au même endroit que dans la vraie vie ?)
Ma carte est, je pense, à l'endroit parce que le ciel est bien "en haut".
Je tiens à préciser que je ne mettrais pas simplement l'arme à l'envers dans le mode scène. J'aimerais qu'il soit correctement positionné pour faciliter les futures étapes de création.
Merci d'avance pour vos réponses.
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Vive Tracker à l'envers dans Unity
Je ne sais pas comment fonctionne le système, mais je pense qu'il doit s'initialiser selon des axes prédéfinis ce qui expliquerait le changement d'orientation de ton arme.
Donc soit ton tracker virtuel (le carré rouge) est mal orienté soit c'est l'arme. Et donc, c'est l'arme puisqu'elle est orientée en fonction de l'autre.
Maintenant, on ne dispose pas assez d'information sur les 2 objets pour confirmer cela.
Il nous faut au minimum les gizmos et les rotations de chaque objet (tracker et arme (ou du noeud intermédiaire s'il existe)) en éditeur et en runtime.
Donc soit ton tracker virtuel (le carré rouge) est mal orienté soit c'est l'arme. Et donc, c'est l'arme puisqu'elle est orientée en fonction de l'autre.
Maintenant, on ne dispose pas assez d'information sur les 2 objets pour confirmer cela.
Il nous faut au minimum les gizmos et les rotations de chaque objet (tracker et arme (ou du noeud intermédiaire s'il existe)) en éditeur et en runtime.
"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: Vive Tracker à l'envers dans Unity
Merci de ta réponse si rapide.
Je vais détailler et mettre pleins de photos dans cette réponse pour essayer de me faire comprendre au maximum et de vous donner le plus d'informations sur mon problème.
Voici déjà une première photo, qui vous montre ma scène.
Le cube blanc représente mon tracker (pour savoir ou positionner mon pistolet avant l'exécution).
Comme vous le voyez à gauche, je dispose de ViveRig, qui est mon "personnage" VR. Il est en X = 0 / Y = 0 et Z = 0. Les axes de rotations sont aussi tous à 0.
La caméra, l'objet "ViveTrackers", "Tracker1", "DeviceTracker", "OpenVRRenderModel" et "Cube" sont tous en 0/0/0, avec des rotations égal à 0.
En clair, j'ai changé de position le pistolet uniquement, pour le positionner en en face du tracker. Comme dans la vraie vie.
Maintenant, voyez ce que cela donne, une fois que je lance le jeux :
Comme vous le voyez, le pistolet est à l'envers.
Je ne veux pas mettre mon pistolet à l'envers dans ma scène pour résoudre le problème. J'aimerai, si possible, que le pistolet reste simplement droit au lancement du jeux.
Voici comment est monté mon tracker :
Update : J'ai replacer mon tracker dans l'autre sens que celle présente sur les photos (la pointe du triangle est maintenant en haut), et le pistolet s'est mis à l'endroit.
Les trackers ont donc bel et bien un "sens"... Ce qui semble logique, mais j'ai plusieurs trackers installés, et je ne peux pas tous les démonter...
Pensez-vous qu'il existe une solution pour corriger le problème dans Unity, hormis celle dit plus haut ? Suis-je obligé de remettre tout mes trackers dans le bon sens ?
Je vais détailler et mettre pleins de photos dans cette réponse pour essayer de me faire comprendre au maximum et de vous donner le plus d'informations sur mon problème.
Voici déjà une première photo, qui vous montre ma scène.
Le cube blanc représente mon tracker (pour savoir ou positionner mon pistolet avant l'exécution).
Comme vous le voyez à gauche, je dispose de ViveRig, qui est mon "personnage" VR. Il est en X = 0 / Y = 0 et Z = 0. Les axes de rotations sont aussi tous à 0.
La caméra, l'objet "ViveTrackers", "Tracker1", "DeviceTracker", "OpenVRRenderModel" et "Cube" sont tous en 0/0/0, avec des rotations égal à 0.
En clair, j'ai changé de position le pistolet uniquement, pour le positionner en en face du tracker. Comme dans la vraie vie.
Maintenant, voyez ce que cela donne, une fois que je lance le jeux :
Comme vous le voyez, le pistolet est à l'envers.
Je ne veux pas mettre mon pistolet à l'envers dans ma scène pour résoudre le problème. J'aimerai, si possible, que le pistolet reste simplement droit au lancement du jeux.
Voici comment est monté mon tracker :
Update : J'ai replacer mon tracker dans l'autre sens que celle présente sur les photos (la pointe du triangle est maintenant en haut), et le pistolet s'est mis à l'endroit.
Les trackers ont donc bel et bien un "sens"... Ce qui semble logique, mais j'ai plusieurs trackers installés, et je ne peux pas tous les démonter...
Pensez-vous qu'il existe une solution pour corriger le problème dans Unity, hormis celle dit plus haut ? Suis-je obligé de remettre tout mes trackers dans le bon sens ?
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Vive Tracker à l'envers dans Unity
S'il y a un sens, il est fait pour être respecté, non?
En gros, tu montes à l'envers et ensuite tu demandes pour le faire à l'envers dans Unity pour contrer ton erreur de départ. Tu ajoutes donc une correction à une erreur plutôt que de ne pas faire l'erreur en premier lieu.
Le tracker réel à un sens pour que le tracker virtuel se cale sur ce sens. Il est la passerelle entre le réel et le virtuel. Toucher à cela n'est pas recommandé puisque tu modifies la référence.
En gros, au lieu de calibrer sans rotation, tu seras obligé de calibrer avec une rotation de 180° en Z local. Ce n'est pas faux en soi, mais c'est prendre le pb à l'envers.
Donc si tu positionnes tes trackers "à l'envers" (ce qui n'a pas de sens en soi, ils sont juste positionnés d'une manière qui ne te convient pas) alors il faut les positionner à l'envers aussi dans Unity, ou bien inverser les objets trackés.
Le mieux étant de les positionner dans le bon sens dans le réel pour qu'ils le soient dans le virtuel.
Comme dit, ça n'a pas de sens en soi, puisque la tracking est local. C'est juste une vision de l'esprit parce que tu veux que ton arme ne soit pas retournée dans Unity. Mais le tracking est juste quelque soit l'orientation réelle.
"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: Vive Tracker à l'envers dans Unity
Merci des réponses, quand je me suis rendu compte trop tard que les trackers avait un sens obligatoire. Ducoup j'avais déjà fait mes POGO pins (boutons personnalisable sur les trackers) etc... et le retourner dans la vraie vie est compliqué sans abîmer les connectiques à l'intérieur.
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Vive Tracker à l'envers dans Unity
Dans ce cas, il te faut palier en inversant dans Unity, donc faire une rotation de ton arme.
Cela t'est peut être contraignant en éditeur, mais pas en Build.
Sinon, il te faut faire un script spécifique pour effectuer une rotation de tes objets enfants des trackers pour les tourner au Start()
Ainsi, tu les auras dans le bon sens en éditeur (mais inversé par rapport à la réalité) et en Build.
Cela t'est peut être contraignant en éditeur, mais pas en Build.
Sinon, il te faut faire un script spécifique pour effectuer une rotation de tes objets enfants des trackers pour les tourner au Start()
Ainsi, tu les auras dans le bon sens en éditeur (mais inversé par rapport à la réalité) et en Build.
"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: Vive Tracker à l'envers dans Unity
C'est exactement ce que j'ai fait, et regardez le nouveau problème (Sincèrement désolé, je n'ai jamais eu de problème de ce genre dans Unity) :
J'essaie de faire tourner un objet à "-90" degrés au début de mon jeu à l'axe X et Y.
J'ai donc fait un tout petit script qui permettrait cela, le voici :
J'obtiens ceci :
Maintenant le problème est le suivant, voyez par vous-même :
Voici ce que j'ai avant de build: Mon objet a déjà une rotation de -90 degrés sur l'axe des X.
J'entre les valeurs -90 | -90 | 0 dans mon code. (Je souhaite donc avoir en Rotation : X = -180 / Y = -90 / Z = 0 )
Cependant, lorsque je lance l'application, l'axe X est égal à -180 (-90-90 = -180) MAIS le -90 de l'axe Y a été ajouté à l'axe Z ? ?? Et en plus de cela, l'axe Y a été assigné à -1.52587 ? ??
Quelqu'un a-t-il une idée de ce qui ne va pas ? J'attends vos réponses et vous remercie d'avance.
PS : J'apprécie le fait que vous ne vous demandez pas pourquoi je veux faire une chose aussi farfelue ^^. J'ai juste réellement besoin de faire ça, et ce nouveau problème me laisse bouche bée parce que.... le code ne consiste qu'à quelques lignes :')
J'essaie de faire tourner un objet à "-90" degrés au début de mon jeu à l'axe X et Y.
J'ai donc fait un tout petit script qui permettrait cela, le voici :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectRotation : MonoBehaviour
{
public Vector3 anglesToRotate;
void Start()
{
this.transform.Rotate(anglesToRotate);
}
}
Voici ce que j'ai avant de build: Mon objet a déjà une rotation de -90 degrés sur l'axe des X.
J'entre les valeurs -90 | -90 | 0 dans mon code. (Je souhaite donc avoir en Rotation : X = -180 / Y = -90 / Z = 0 )
Cependant, lorsque je lance l'application, l'axe X est égal à -180 (-90-90 = -180) MAIS le -90 de l'axe Y a été ajouté à l'axe Z ? ?? Et en plus de cela, l'axe Y a été assigné à -1.52587 ? ??
Quelqu'un a-t-il une idée de ce qui ne va pas ? J'attends vos réponses et vous remercie d'avance.
PS : J'apprécie le fait que vous ne vous demandez pas pourquoi je veux faire une chose aussi farfelue ^^. J'ai juste réellement besoin de faire ça, et ce nouveau problème me laisse bouche bée parce que.... le code ne consiste qu'à quelques lignes :')
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Vive Tracker à l'envers dans Unity
1/ Ne pas confondre rotation locale et world
2/ les EulerAngles peuvent prendre plusieurs valeurs pour une même rotation, c'est pour cela que les quaternions sont utilisés. (-90,0-90) peut être égal à (180,90, 0) par exemple (c'est faux comme exemple mais c'est vrai pour certaines combinaisons)
Par contre, le 1.52587, je ne vois pas. Est-ce qu'un autre gameObject ou script joue sur sa rotation?
2/ les EulerAngles peuvent prendre plusieurs valeurs pour une même rotation, c'est pour cela que les quaternions sont utilisés. (-90,0-90) peut être égal à (180,90, 0) par exemple (c'est faux comme exemple mais c'est vrai pour certaines combinaisons)
Par contre, le 1.52587, je ne vois pas. Est-ce qu'un autre gameObject ou script joue sur sa rotation?
"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: Vive Tracker à l'envers dans Unity
Ecoute, j'ai utilisé après avoir lu ta réponse la fonction "Quaternion.Euler();" avec (-180.0f, -90.0f, 0.0f) en paramètre et... ça à marché .
Merci beaucoup de tes réponses, je ne savais pas que la rotation avait cette ambiguïté ! Je ne sais pas trop la raison du pourquoi, mais il doit y'avoir une raison que j'essayerai de comprendre quand j'aurai un peu de temps ^^.
En attendant, comme tu me l'as recommandé, j'utilise Quaternion pour mes rotations d'objets.
Merci encore !
Merci beaucoup de tes réponses, je ne savais pas que la rotation avait cette ambiguïté ! Je ne sais pas trop la raison du pourquoi, mais il doit y'avoir une raison que j'essayerai de comprendre quand j'aurai un peu de temps ^^.
En attendant, comme tu me l'as recommandé, j'utilise Quaternion pour mes rotations d'objets.
Merci encore !