Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Unity] [c#] Probléme de script d'animation

Animation qui saccade ou qui reboot a chaque frame

    6 novembre 2017 à 10:05:03

    Bonjour à toutes et tous,

    Alors voila on s'est lancés moi et un ami sur un jeu de plateforme en 2,5D.

    Étant débutant en programmation, je décide d'importer le perso que j'ai crée et de le faire bouger, j'ai également pris les animation de base du standard asset dans un premier temps.

    J'arrive a aller de droite a gauche et le faire sauter (ypikayé!)

    Mon problème arrive quand j'assigne les animations, quand je démarre je suis en anim Idle, nikel, mais quand j’appuie sur droite ou gauche l'animation de marche reboot a chaque frame, en tout cas c'est l'impression que ça donne.

    voici mon code:

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

    public class PlayerController : MonoBehaviour
    {

        public float speed = 0.05f;
        public float jumpSpeed = 0.15f;
        public float gravity = 45f;   
        Animator anim;
        CharacterController Jacky;
        private Vector3 moveDirection = Vector3.zero;
        public bool aGauche = true;
       

        void Start()
        {
            Jacky = GetComponent<CharacterController>();
            anim = GetComponent<Animator>();
           
        }

        void Update()

        {



            if (Jacky.isGrounded)
            {
                moveDirection = new Vector3(0, 0, Input.GetAxis("Jump"));
                moveDirection *= speed;
               
            }
           
            moveDirection.y -= gravity * Time.deltaTime;
            Jacky.Move(moveDirection * Time.deltaTime);


            // Mouvements
            {
                if (Input.GetKey("right"))
                {
                    transform.Translate(0, 0, speed);
                    transform.eulerAngles = new Vector2(0, 90);
                    anim.Play("HumanoidWalk");

                }
                       
                else
                {
                    anim.Play("HumanoidIdle");               
                }

               

                if (Input.GetKey("left"))
                {
                    transform.Translate(0, 0, speed);
                    transform.eulerAngles = new Vector2(0, 270);
                    anim.Play("HumanoidWalk");
                }
                else
                {
                    anim.Play("HumanoidIdle");
                }

                                
                       
                {
                if (Input.GetKey("up"))
                {
                         transform.Translate(0, jumpSpeed, 0);

                }
               

                       
                   
                }
            }
        }

    Merci d'avance

    Petite précision, lorsque par exemple j’enlève le "else     anim.Play("HumanoidIdle");"  sur la direction "right", quand j'appuie sur la gauche mon perso va bien a gauche ET joue correctement l'animation de marche.

    -
    Edité par ThomasH. 6 novembre 2017 à 10:30:21

    • Partager sur Facebook
    • Partager sur Twitter
      7 novembre 2017 à 17:30:12

      Bonjour,

      Je penses que ton problème est dû à la méthode GetKey qui est appelée seulement lorsque l'utilisateur appui sur la touche, essai avec la méthode GetKeyDown qui est appelée tant que l'utilisateur reste appuyé.

      • Partager sur Facebook
      • Partager sur Twitter
        8 novembre 2017 à 20:23:04

        J'avais testé avec le "GetKeydown", mais ça ne changeai rien, j'ai fait d'une autre façon. j'ai même refait mon script, c’était trop le bordel!!

        J'ai ajouter des conditions pour dire que quand je relâche la touche, il se met sur "Idle". j'ai un peu contourner le problème je pense qu'il y a plus simple mais comme je le dis je débute, donc je fais en sorte de faire ce que je connais.

        Maintenant j'ai un autre soucis du fait que lorsque j'appuie sur la touche "crouch" et "avancer" il joue les deux animations "crouch Idle" et "walk" et c'est logique.

        n'y a t-il pas de fonction pour dire que lorsque telle animation est jouée ne pas jouer l'autre?

        peut être avec des variables bool?

        j'ai essayé de trouver sur des fofo fr et anglais mais j'ai rien trouvé.

        Merci de vos réponses.

        • Partager sur Facebook
        • Partager sur Twitter
          8 novembre 2017 à 20:34:24

          Tu devrais suivre ce tuto et utiliser un animator controller c'est beaucoup plus propre ;)

          -
          Edité par WARAW 8 novembre 2017 à 20:34:32

          • Partager sur Facebook
          • Partager sur Twitter
            9 novembre 2017 à 7:10:54

            Merci, Waraw comme tu peux t'en douter je suis tombé sur ce tuto dans mes recherches, néanmoins je trouve ça un peu fastidieux d'apprendre tout ça pour un jeu 2d, l'interface a un peu changé par rapport a la video. C'est pour ça que je demandais si quelqu'un avait une solution uniquement avec le script pour arrêter une animation ou jouer uniquement une autre.

            un truc du genre:

            if (Input.GetKey(Right) && (Input.GetKey(Run)))

                    {
                        transform.Translate(0, 0, runSpeed * Time.deltaTime);
                        anim.Play("HumanoidRun");

                      arrete de jouer "cette animation"!

            Sinon je verrai pour l'animator mais pas facile, il n'y a pas de tuto complet en français, et je maitrise ni shakespeare ni sa langue ;)

            -
            Edité par ThomasH. 9 novembre 2017 à 8:54:58

            • Partager sur Facebook
            • Partager sur Twitter

            [Unity] [c#] Probléme de script d'animation

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown