[Résolu]Déplacement et smooth rotation d'un sprite mode joystick

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
mikart
Messages : 18
Inscription : 20 Mai 2014 23:36

[Résolu]Déplacement et smooth rotation d'un sprite mode joystick

Message par mikart » 11 Nov 2019 01:46

Bonjour,

voila j'ai un petit problème dans mon code je n'arrive pas à garder l'angle dans le quel je me dirige
j'utilise les input.GetAxis pour faire la rotation de mon sprite et il revient toujours à sa position initiale :rougefaché:

Code : Tout sélectionner

     public Transform rotationTarget;
   

    void Update()
    {
        

        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        float angle = Mathf.Atan2(vertical, horizontal) * Mathf.Rad2Deg;      
        rotationTarget.rotation = Quaternion.Euler(new Vector3(0, 0, angle));

    }  
merci d'avance pour votre aide
Dernière édition par mikart le 11 Nov 2019 14:16, édité 2 fois.

Moi 1971
Messages : 713
Inscription : 29 Sep 2015 13:38

Re: déplacement et rotation d'un sprite

Message par Moi 1971 » 11 Nov 2019 10:06

Bonjour, c'est normal qu'il revienne toujours à sa position initiale, car ton code ne conditionne pas la rotation. La rotation se fait tout le temps, même quand il n'y a pas de données dans les "Input.GetAxis". Il te faut mettre un if() sur Horizontal différent de 0 OU Vertical différent de 0.
Bon code.
La dyslexie n'a rien à voir avec l'illettrisme.

mikart
Messages : 18
Inscription : 20 Mai 2014 23:36

Re: déplacement et rotation d'un sprite

Message par mikart » 11 Nov 2019 13:17

Bonjour et merci de la réponse cela fonctionne à merveille

voici le code : le lien pour le teste : https://stiou62.itch.io/alstar-game?sec ... l72i6utov4

Code : Tout sélectionner

void Update()
    {
        // mise en place des axes de direction 
        float horizontal = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
        float vertical = Input.GetAxis("Vertical") * speed * Time.deltaTime ;
        // calcule de l'angle avec (tan) transformation de l'angle en radian  
        float angle = Mathf.Atan2(horizontal, vertical) * Mathf.Rad2Deg;


        if (horizontal != 0 || vertical != 0)
        {
            // transformation de l'angle du sprite 
            transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, -angle);
        }
        // mouvement par pixel de l'objet vide 
        translate_targ.Translate (horizontal,vertical,0);
    } 
Merci encore à toi par contre serais-tu comment je peux smooth la rotation je pense utiliser Quaternion.Lerp ?


[Edit] j'ai peu êtres trouvé ma solution dites moi si je me trompe :

voici le teste : https://stiou62.itch.io/spaceproje?secr ... lSJHfaBSL8

Code : Tout sélectionner

 void Update()
    {
        // mise en place des axes de direction 
        float horizontal = -Input.GetAxis("Horizontal") * speed * Time.deltaTime;
        float vertical = Input.GetAxis("Vertical") * speed * Time.deltaTime;
        // calcule de l'angle avec (tan) transformation de l'angle en radian  
        float angle = Mathf.Atan2(horizontal, vertical) * Mathf.Rad2Deg;
        

        if (horizontal != 0 || vertical != 0)
        {
            // transformation de l'angle du sprite
            /*
            transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, -angle);
            rotationTarget.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
            */
            //transformation de angle en quaternion 
            player_rot = Quaternion.Euler (rotationTarget.rotation.x, rotationTarget.rotation.y, angle);
            // utilisation de lerp pour smooth la rotation de mon personnage 
            rotationTarget.rotation = Quaternion.Lerp(rotationTarget.rotation, player_rot, speed_rot * Time.deltaTime);
        }
        // mouvement par pixel de l'objet vide 
        translate_targ.Translate(-horizontal, vertical, 0);
    }

Répondre

Revenir vers « (C#) CSharp »