[RESOLU][DB-AL] retournement d'un sprite

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
xorgalto
Messages : 2
Inscription : 17 Fév 2019 23:49

[RESOLU][DB-AL] retournement d'un sprite

Message par xorgalto » 18 Fév 2019 00:07

Bonjour,
Je fais actuellement un platformer 2d mais j'ai un problème avec mon personnage :
j'aimerais que lorsqu'il va vers la droite, le sprite s'oriente vers la droite et inversement pour la gauche.
Voici mon script :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{

    float x;
    float speed;

    void Start()
    {     }
    void Update()
    {
        
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            this.transform.Translate(Vector3.left * this.speed);
            Vector3 scale = new Vector3(x, 0.0f, 0.0f);
            x = -1;
            transform.localScale = scale;           
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            this.transform.Translate(Vector3.right * this.speed);
            Vector3 scale = new Vector3(x, 0.0f, 0.0f);
            x = 1;
            transform.localScale = scale;
        }
    }
}
Lorsque j'essaye de bouger, mon perso se barre vers la gauche (ou la droite selon sur quelle flèche j'ai appuyé) comme si "speed" avait été augmenté (dans unity speed = 0.2).

En espérant que vous pourrez m'aider !
Xorgalto

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

Re: [DB-AL] retournement d'un sprite

Message par Moi 1971 » 18 Fév 2019 09:35

Bonjour,
quel est ton problème? Tu dis :
"j'aimerais que lorsqu'il va vers la droite, le sprite s'oriente vers la droite et inversement pour la gauche."
et après tu dis :
"mon perso se barre vers la gauche ... comme si "speed" avait été augmenté"

Ton personnage ne se retourne pas ou/et il se barre?

Après je comprends pas ton code :
Tu utilises une variable "x" avant de lui donner une valeur.
x est un float tu la renseigne comme un int.

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

Re: [DB-AL] retournement d'un sprite

Message par boubouk50 » 18 Fév 2019 10:16

Il y a beaucoup de chose à revoir dans ce script.
pour la vitesse:
Elle n'est pas dépendante du framerate, donc plus celui-ci sera élevé plus ton personnage bougera vite (et inversement).
Tu as une variable Time.deltaTime qui te permet de maintenir une vitesse constante.
Pour le test gauche/droite, tu n'es pas obligé de le faire à chaque Update () mais seulement lorsque la touche est enfoncée via GetKeyDown (). Cette fonction est vraie une fois lors de l'appui sur la touche, donc tu peux effectuer le changement de sens uniquement à cet instant et gérer le déplacement en dehors avec GetKey ().

Cela devrait donner quelque chose qui avoisine cela.

Code : Tout sélectionner

void Update()
{
	//Touche enfoncée Gauche
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
        	transform.localScale = new Vector3 (1f, 0f, 0f);        
        }
        //Touche enfoncée Droite
         if (Input.GetKeyDown(KeyCode.RightArrow))
        {
        	transform.localScale = new Vector3 (-1f, 0f, 0f);        
        }
        
        //Déplacement Gauche
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            this.transform.Translate(Vector3.left * speed * Time.deltaTime);
        }
        //Déplacement Droite
        if (Input.GetKey(KeyCode.RightArrow))
        {
            this.transform.Translate(Vector3.right * speed * Time.deltaTime);
        }
}
"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

xorgalto
Messages : 2
Inscription : 17 Fév 2019 23:49

Re: [DB-AL] retournement d'un sprite

Message par xorgalto » 18 Fév 2019 19:38

Bonjour!
tout d'abord merci pour vos réponses !
J'ai donc réussi à faire changer le sens du perso en utilisant GetKeyDown(), le principal problème venait du fait que je changeait la scale à 1, 0, 0 au lieu de 1, 1, 1 (ou -1, 1, 1) . J'ai aussi ajouté la variable Time.deltaTime pour le déplacement. Voici donc mon programme final :

Code : Tout sélectionner

void Update()
    {
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            this.transform.Translate(Vector3.left * speed * Time.deltaTime);
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            this.transform.Translate(Vector3.right * speed * Time.deltaTime);
        }

        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            transform.localScale = new Vector3(-1f, 1f, 1f);
        }

        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            transform.localScale = new Vector3(1f, 1f, 1f);
        }
    }
Encore merci pour votre aide et àil une prochaine fois !

Répondre

Revenir vers « (C#) CSharp »