Jeu 3d plateformer probleme scirpt

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
IsoUnity
Messages : 1
Inscription : 13 Sep 2018 13:01

Jeu 3d plateformer probleme scirpt

Message par IsoUnity » 13 Sep 2018 13:11

Salut j'ai commencé Unity il y a pas très longtemps, je sais a peu près coder en C# et donc
cela fait 3 jours que je bloque sur le même problème j'essaie de faire un jeu plateformer en 2d-3d a la mario et donc la je suis en train de faire les deplacements du personnage mon problème est que je n'arrive pas a scripté le fait que lorsque j'avance vers la gauche le personnage doit se retourner et doit marcher dans le coté ou il se retourne en effet la j'ai reussi a faire en sorte que le personnage marche vers lavant en appuyant sur la touche droite mais lorsquon appuie sur la touche ggauche le personnage se retourne mais avance toujours sur la droite comment dois-je faire svp. Voila un bout de code :

Code : Tout sélectionner

public class PlayerCC : MonoBehaviour {

    private Animator anim;
    public int abs = 0;
    public int abs2 = 0;


    public float speed = 6f;
    public float jumpSpeed = 8f;
    public float gravity = 20f;
    private Vector3 moveDirection = Vector3.zero;
    CharacterController Cc;

	// Use this for initialization
	void Start () {
        Cc = GetComponent<CharacterController>();
        anim = GetComponent<Animator>();

    }
	
	// Update is called once per frame
	void Update () {

        if (Cc.isGrounded)
        {
            moveDirection = new Vector3(0, 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
        }

        moveDirection.y -= gravity * Time.deltaTime;
        Cc.Move(moveDirection * Time.deltaTime);

if (Input.GetAxis("Vertical") > 0)
        {
            //Marche avant
            anim.SetBool("Walk", true);

        }
        if (anim.GetBool("Walk") == true && abs == 1)
        {
            transform.Rotate(Vector3.up, -180);
            abs--;
        }



        if (Input.GetAxis("Vertical") < 0 && abs ==0)
        {
            //Marche arrière               
                    
            transform.Rotate(Vector3.up, -180);
            anim.SetBool("WalkA", true);
            abs++;

        }

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

Re: Jeu 3d plateformer probleme scirpt

Message par Liven » 14 Sep 2018 05:20

Avec la ligne "moveDirection = new Vector3(0, 0, Input.GetAxis("Vertical"));" ton move peut être positif ou négatif, logiquement s'il est négatif il devrait aller en arrière, mais ton expression "transform.Rotate(Vector3.up, -180);" retourne ton objet. Ceci associé au fait que tu utilise "transform.TransformDirection" qui donne une direction "locale" : le devant sera toujours le devant de ton perso (s'il regard en arrière, son "devant" serra vers la gauche et donc son derrière vers la droite, ce qui explique pourquoi ton perso va vers la droite alors que tu applique un mouvement arrière, il va juste en arrière par rapport à lui)

Bref j'arrive pas à l'expliquer clairement, mais à mon avis si tu prends la valeur absolue de ton axis cela devrait régler ton problème :
moveDirection = new Vector3(0, 0, Mathf.Abs(Input.GetAxis("Vertical")));

Répondre

Revenir vers « (C#) CSharp »