Page 1 sur 1

[RESOLU] Problème de code Rotation roues et angl

Publié : 22 Fév 2018 12:35
par pcpunch
Bonjour je cherche à faire une rotation de mes roues avant, jusque-là elle tourne bien sur elle-même en marche avant ou marche arrière ;

Code : Tout sélectionner

	void Update () {

        if(Input.GetKey(KeyCode.Space) || Input.GetKey(KeyCode.LeftAlt))
        {
            Vector3 dir = Vector3.zero;

            if(Input.GetKey(KeyCode.Space))
            {
                dir = Vector3.forward;
                Avg.transform.Rotate(Vector3.right * 200 * Time.deltaTime);
                Avd.transform.Rotate(Vector3.right * 200 * Time.deltaTime);
                Arg.transform.Rotate(Vector3.right * 200 * Time.deltaTime);
                Ard.transform.Rotate(Vector3.right * 200 * Time.deltaTime);
             
            }
            else
            {
                dir = -Vector3.forward;
                Avg.transform.Rotate(-Vector3.right * 200 * Time.deltaTime);
                Avd.transform.Rotate(-Vector3.right * 200 * Time.deltaTime);
                Arg.transform.Rotate(-Vector3.right * 200 * Time.deltaTime);
                Ard.transform.Rotate(-Vector3.right * 200 * Time.deltaTime);
               
            }

            transform.Translate(dir * speed * Time.deltaTime);
            transform.Rotate(Vector3.up * Mathf.Sign(dir.z) * cRotation * Input.GetAxis("Horizontal") * Time.deltaTime);
            
        }

        WheelAngle();        
    }
    
Ça se gâte quand j'utilise la méthode WhellAngle() dans l'update :

Code : Tout sélectionner

    void WheelAngle()
    {
        if (Input.GetAxisRaw("Horizontal") > 0)
        {
            Avg.transform.localRotation = Quaternion.Euler(Avg.transform.localEulerAngles.x, 30, 0);
            Avd.transform.localRotation = Quaternion.Euler(Avd.transform.localEulerAngles.x, 30,0);          

        }

        if (Input.GetAxisRaw("Horizontal") < 0 )
        {
            Avg.transform.localRotation = Quaternion.Euler(Avg.transform.localEulerAngles.x, -30, 0);
            Avd.transform.localRotation = Quaternion.Euler(Avd.transform.localEulerAngles.x, -30, 0);
        }

        if (Input.GetAxisRaw("Horizontal") == 0 )
        {
            Avg.transform.localRotation = Quaternion.Euler(Avg.transform.localEulerAngles.x, 0, 0);
            Avd.transform.localRotation = Quaternion.Euler(Avd.transform.localEulerAngles.x, 0, 0);
        }
    }
    
Pour l'angle en fonction de la direction c'est Ok, mais pour la rotation des roues sur elles-mêmes ça bloque au bout de 2 secs.

Je n'arrive pas a comprendre pourquoi ?
bien que cela vient trés certainement de mes Quaternion.Eulur et surtout comment opérer, si vous avez une piste ?

Merci :oops:

Ps: je n'utilise pas de whellcollider c'est voulu et impératif.

Re: [MY-AL] Problème de code Rotation roues et angle

Publié : 22 Fév 2018 12:58
par boubouk50
Tu devrais séparer les rotations. Ici, tu effectues des rotations séparément une fois avec Rotate () et l'autre en affectant directement le quaternion. C'est risqué quand on tâtonne.
Je te propose d'ajouter un Empty GameObject parent de chaque roue.
Ce parent vide sera chargé d'effectuer la rotation gauche et droite.
Les roues seront chargées d'effectuer la rotation avant arrière.
Ainsi, tu seras sur de ne pas avoir de conflit sur les rotations.

Re: [MY-AL] Problème de code Rotation roues et angle

Publié : 22 Fév 2018 13:30
par pcpunch
Merci Boubouk :lol: :lol: :lol: :lol: çà fonctionne

C'est effectivement très logique :roll: et une solution très simple a mettre en oeuvre !

J'ai envie de dire "élementaire mon chér Watson !!!!"

Merci beaucoup pour ta réactivité !!! :merci: :merci: