[VR] - Position du corps d'un personnage

Section dédiée à la VR avec Unity
Dedemon
Messages : 3
Inscription : 03 Jan 2017 12:47

[VR] - Position du corps d'un personnage

Message par Dedemon » 03 Jan 2017 15:26

Bonjour,

Actuellement, je travaille sur un projet VR en utilisant le plugin SteamVRPlugin qui se trouve dans l'asset store. Pour ce projet, j'ai un personnage qui contient 2 meshes séparés (la tête et le corps).
Depuis plusieurs jours, j'essaye d'avoir une position "exacte" pour le corps de mon personnage. J'ai essayé de prendre les yeux comme référence, mais dès lors que je regarde en haut ou en bas, le corps monte ou descend.
Après de nombreuses recherches, j'ai compris que le corps devait copier la position du cou et non des yeux. J'ai donc crée un objet "Cou" qui a un offset par rapport aux yeux (de 0,075 en Y). Ce objet contient un script qui lui permet de se repositionner si les yeux sont plus loin que la distance initial (c'est à dire l'offset). Cependant j'ai quelques petit soucis, si je recule, le cou (et donc le corps) se retrouve devant moi. Mon corps monte un peu si je bouge et descend si je reviens a mon état initial (Position de départ et tête droite).
Pouvez-vous me dire si je suis dans la bonne voie ? Si oui, comment puis-je avoir la bonne position du cou même si je bouge ? Si non, avez-vous d'autre pistes à me donner ?

Merci d'avance pour vos réponses et désolé pour ce long (très long paragraphe :)).

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

Re: [VR] - Position du corps d'un personnage

Message par boubouk50 » 03 Jan 2017 15:52

En gros, ton body doit seulement suivre la position de ton coup et pas la rotation?

Je ne suis pas sur qu'il faille séparer la tête et le corps. Si tu te baisses, il faut aussi que ton corps se baisse mais que les pieds restent au sol. Ils font partie de la même entité seulement la tête est le centre de contrôle au lieu du pelvis habituel.
Tu as un rig sur ta tête et ton corps? Comment tu fais le lien? Peut-on voir ton script?
"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

Dedemon
Messages : 3
Inscription : 03 Jan 2017 12:47

Re: [VR] - Position du corps d'un personnage

Message par Dedemon » 03 Jan 2017 16:09

Pour mon personnage, je n'ai pas de rig. La tête et le corps sont deux objets séparés mais le corps a pour enfant la tête. Le corps s'occupe de copier la position et la rotation sur l'axe Y des yeux. La tête copie la rotation sur l'axe X et l'axe Z des yeux.
Pour l'instant, mon code pour le cou n'est pas fini mais je galère pas mal.

Voici le code:

Code : Tout sélectionner

using UnityEngine;

public class VRNeck : MonoBehaviour
{
    [SerializeField]
    private Transform   _eyeTransform   =   null;
    [SerializeField]
    private Vector3     _neckOffset     =   new Vector3(0f, 0.075f, 0f);

    private Transform   _neckTransform      =   null;
    private float       _defDistanceNeckEye =   0f;
    private float       _curDistanceNeckEye =   0f;

    private void    Awake()
    {
        _neckTransform = this.transform;
        _defDistanceNeckEye = Vector3.Distance(Vector3.zero, _neckOffset);
    }

    private void    FixedUpdate()
    {
        if (null != _eyeTransform)
        {
            if (0f > Vector3.Dot(_neckTransform.forward.normalized, (_eyeTransform.position - _neckTransform.position).normalized))
            {
                _neckTransform.position =   _eyeTransform.position - _neckOffset;
            }
            else
            {
                _curDistanceNeckEye = Vector3.Distance(_eyeTransform.position, _neckTransform.position);
                if (_defDistanceNeckEye < _curDistanceNeckEye)
                {
                    _neckTransform.position += (_eyeTransform.position - _neckTransform.position).normalized * (_curDistanceNeckEye - _defDistanceNeckEye);
                    //_neckTransform.position = _eyeTransform.position - _neckOffset;
                }
            }
        }
    }
}
Pièces jointes
Character.png
Character.png (66.68 Kio) Consulté 3069 fois

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

Re: [VR] - Position du corps d'un personnage

Message par boubouk50 » 03 Jan 2017 17:09

Ah ok, pas de rig!
Ta solution est un peu caduque et alambiquée! (deux mots que je peine à caser alors j'en profite)
Tu ne devrais pas lier la tête au corps et déplacer ensuite chacun séparément mais de façon liée puisque le corps se déplace (tu comprends mieux l'utilisation des deux mots sus-cités).
Le problème se situe au niveau de ta tête je pense. Son pivot tout du moins. Quand tu bouges la tête, c'est au niveau du cou que tout se joue, pas au niveau de la tête. Il sera l'axe de rotation de ta tête et le point de positionnement de ton corps.
Si tu veux caler ton corps par rapport à ta tête, alors ce n'est pas le corps qui doit gérer le déplacement.
Si tu dois caler le cou en fonction de la tête alors tu ne dois pas gérer la rotation par la tête, mais par le cou.
Ton cou doit devenir l'élément principal de ton rig. (du moins son point de pivot).

Peut-on avoir un aperçu des pivots de ton perso. Que je sache comment cela est conçu en terme de hiérarchie. Je pense que c'est la que ça pêche.

Le but ici est de créer le pivot de ton cou, qui gérera la rotation de ta tête (par lien pur parent-enfant) et d'ensuite caler le corps verticalement dessous ton cou. Puisque celui-ci ne fait que tourner autour de son pivot, il ne bouge pas lors d'une rotation, donc le corps restera en place quand tu tourneras la tête. Le déplacement du joueur se fera aussi sur le cou, puisque le parent de tous les éléments, donc tout suivra.
"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

Dedemon
Messages : 3
Inscription : 03 Jan 2017 12:47

Re: [VR] - Position du corps d'un personnage

Message par Dedemon » 03 Jan 2017 18:01

Vous pouvez retrouver ci-joint, ma hiérarchie. L'objet "CharacterOne" équivaut au cou car c'est cet objet qui copie la position et la rotation en Y des yeux.L'objet "Pivot - Head" s'occupe de copier la rotation en X et en Z des yeux. Les objets "Head" et "Body" sont juste les meshes renderer.

En VR, nous n'avons que la position et la rotation des yeux. Quand je me déplace, les yeux changent de position ce qui est normal. Mais quand je penche la tête, les yeux effectuent une rotation (normal) et change de position. Donc pour éviter que mon personnage ne bouge quand je penche ma tête, j'essaye si possible de déterminer la position du cou (ne fonctionne toujours pas pour l'instant).
Pièces jointes
CharacterArchi.png
CharacterArchi.png (1.93 Kio) Consulté 3045 fois

Répondre

Revenir vers « Unity et la VR »