[Résolu] Animation: changer d'état

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
IkaGame
Messages : 75
Inscription : 13 Oct 2016 15:43

[Résolu] Animation: changer d'état

Message par IkaGame » 26 Oct 2016 05:47

...Bon je pense que sa n'aurais pas trop tarder mais cette fois-ci coté animation...

Alors voila j'ai 4 animations !!!

Iddle : Doit être activer lorsque le player est à l'arrêt

Marche : Lorsque le personnage avance en utilisant Z ou la touche directionnel

Courir
: Lorsque le personnage presser LeftShift + Z . ou + bouton directionel du haut

Recharger : Lorsque le personnage presse la touche R

Mais voila c'est un peu le bazar et même le gars du tuto bloque un moment pour l'animation courir...

Mon personnage démarre bien en Idle ,
Lorsque je marche parfait
Lorsque je cours l'anim ce coupe,
Lorsque je recharge sa fonctionne l'animation ce coupe , c'est à dire qu'elle ne ce joue pas en entier

J'ai bien sur régler les transitions d'anim comme il fallait et vérifier si je ne m'étais pas tromper mais impossible de réussir à trouver le problème

Désolé si le schémas n'est pas assez clair , tout d'abord voici le tuto :

https://www.youtube.com/watch?v=kpvjLc7 ... Wf&index=2

Le script :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class AnimationPlayer : MonoBehaviour {

    private Animator anim;
    public AudioClip RechargeSon;
    
    // Use this for initialization


    void Start () {
        anim = GetComponent<Animator>();
	}
	
	// Update is called once per frame
	void Update () {
	
       if(Input.GetKey(KeyCode.Z))

        {
            anim.SetBool("Marche", true);
            anim.SetBool("Course", false);
        }
        if (!Input.GetKey(KeyCode.Z))

        {
            anim.SetBool("Marche", false);
        }

        if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKeyUp(KeyCode.Z))
        {
            anim.SetBool("Marche", false);
            anim.SetBool("Course", true);
        }

        if (!Input.GetKey(KeyCode.LeftAlt) && !Input.GetKeyUp(KeyCode.Z))
        {
            anim.SetBool("Marche", false);
            anim.SetBool("Course", false);
        }

        if (Input.GetKeyDown(KeyCode.R) )
        {
            GetComponent<AudioSource>().PlayOneShot(RechargeSon);
            anim.SetTrigger("Recharge");
        }
    }
}

Quelques Screens

Image

Image
Dernière édition par IkaGame le 28 Oct 2016 20:50, édité 3 fois.

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

Re: [DB-AL]Animation: changer d'état

Message par boubouk50 » 26 Oct 2016 09:28

IkaGame a écrit :...Bon je pense que sa n'aurais pas trop tarder mais cette fois-ci coté animation...
Alors voila j'ai 4 animations !!!
...
 ! Message de : boubouk50
Ceci n'a rien à voir avec le bug de tir! C'est un autre problème DONC nouveau post. Ce n'est pas parce que tu ouvres un post qu'il t'appartient et que tu y fourres ce que tu veux. On trie et range les posts par sujet pour que les membres puissent trouver des solutions similaires.
"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

IkaGame
Messages : 75
Inscription : 13 Oct 2016 15:43

Re: [DB-AL]Animation: changer d'état

Message par IkaGame » 26 Oct 2016 12:42

Désolé pour cette règle , je l'appliquerais désormais .

Si quelqu'un à une idée merci pour l'aide et vos réponses :lol:

IkaGame
Messages : 75
Inscription : 13 Oct 2016 15:43

Re: [DB-AL]Animation: changer d'état

Message par IkaGame » 28 Oct 2016 11:49

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class AnimationPlayer : MonoBehaviour {

    private Animator anim;
    public AudioClip RechargeSon;
    
    // Use this for initialization


    void Start () {
        anim = GetComponent<Animator>();
	}
	
	// Update is called once per frame
	void Update () {
	
       if(Input.GetKey(KeyCode.UpArrow))

        {
            anim.SetBool("Marche", true);
            anim.SetBool("Course", false);
        }
        if (!Input.GetKey(KeyCode.UpArrow))

        {
            anim.SetBool("Marche", false);
        }

        if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKey(KeyCode.UpArrow))
        {
            anim.SetBool("Marche", false);
            anim.SetBool("Course", true);
        }

        if (!Input.GetKey(KeyCode.LeftAlt) && !Input.GetKey(KeyCode.UpArrow))
        {
            anim.SetBool("Marche", false);
            anim.SetBool("Course", false);
        }

        if (Input.GetKeyDown(KeyCode.R) )
        {
            GetComponent<AudioSource>().PlayOneShot(RechargeSon);
            anim.SetTrigger("Recharge");
        }
    }
}

Désolé petite erreur sur le script voici l'actuel.

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

Re: [DB-AL]Animation: changer d'état

Message par boubouk50 » 28 Oct 2016 11:56

IkaGame a écrit :

Code : Tout sélectionner

	
       if(Input.GetKey(KeyCode.UpArrow))

        {
            anim.SetBool("Marche", true);
            anim.SetBool("Course", false);
        }
        if (!Input.GetKey(KeyCode.UpArrow))

        {
            anim.SetBool("Marche", false);
        }
Déjà, utiliser !Input.GetKey () devrait être interdit par la BRAB (Brigade de Répression des Algorithmes Bourrins)
Tu as des fonctions tellement plus efficaces et simples à ta disposition comme:
Input.GetKeyDown () ou Input.GetKeyUp () qui te permettent de savoir quand une touche est appuyée, et quand elle est relâchée.
Ainsi, tu n'iras pas affecter tes booléens à chaque Update (), mais seulement quand cela t'est utile.

Code : Tout sélectionner

if(Input.GetKeyDown(KeyCode.UpArrow))
{
	anim.SetBool("Marche", true);
	anim.SetBool("Course", false);
}
if (Input.GetKeyUp(KeyCode.UpArrow))
{
	anim.SetBool("Marche", false);
}
"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

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

Re: [DB-AL]Animation: changer d'état

Message par Moi 1971 » 28 Oct 2016 12:11

Bonjour,
Il faut que tu trouves par toi même les bugs et pour se faire il faut que tu rendre dans une logique adaptée.
Un des moyens pratique est de mettre des Debug.Log("") bien placés pour comprendre comment le code se déroule et donc pourquoi ça marche ou pas.
Pour ton cas ça pourrait donner ça :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class AnimationPlayer : MonoBehaviour {

    private Animator anim;
    public AudioClip RechargeSon;
   
    // Use this for initialization


    void Start () {
        anim = GetComponent<Animator>();
   }
   
   // Update is called once per frame
   void Update () {
   
       if(Input.GetKey(KeyCode.UpArrow))

        {
            Debug.Log(" Cas 1 ");
            anim.SetBool("Marche", true);
            anim.SetBool("Course", false);
        }
        if (!Input.GetKey(KeyCode.UpArrow))

        {
            Debug.Log(" Cas 2 ");
            anim.SetBool("Marche", false);
        }

        if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKey(KeyCode.UpArrow))
        {
            Debug.Log(" Cas 3 ");
            anim.SetBool("Marche", false);
            anim.SetBool("Course", true);
        }

        if (!Input.GetKey(KeyCode.LeftAlt) && !Input.GetKey(KeyCode.UpArrow))
        {
            Debug.Log(" Caca ");
            anim.SetBool("Marche", false);
            anim.SetBool("Course", false);
        }

        if (Input.GetKeyDown(KeyCode.R) )
        {
            Debug.Log(" Cas 5 ");
            GetComponent<AudioSource>().PlayOneShot(RechargeSon);
            anim.SetTrigger("Recharge");
        }
    }
}
Mais, dans le futur, il faut que tu le fasses par toi même, que tu comprennes comment on fait des tests qui soient pertinents et surtout bien analyser les résultats pour apporter les bons correctifs.
PS : Tes séries de If sont tout pourries. Il te faut utiliser If - ElseIf - Else et regrouper différemment les cas possibles.
PS 2 : Je viens de voir l'intervention de Boubouk, il faut prendre en compte ses recommandations.

IkaGame
Messages : 75
Inscription : 13 Oct 2016 15:43

Re: [DB-AL]Animation: changer d'état

Message par IkaGame » 28 Oct 2016 13:15

Déjà, utiliser !Input.GetKey () devrait être interdit par la BRAB (Brigade de Répression des Algorithmes Bourrins)
Tu as des fonctions tellement plus efficaces et simples à ta disposition comme:
Input.GetKeyDown () ou Input.GetKeyUp () qui te permettent de savoir quand une touche est appuyée, et quand elle est relâchée.
Ainsi, tu n'iras pas affecter tes booléens à chaque Update (), mais seulement quand cela t'est utile.
:mdr1: :mdr1: :mdr1:

boukbou0 k5: Pas mal pas mal , oui je prendrais sa en compte mais j'essaie de comprendre un maximum le tutoriel mais le gars avais l'air bloqué...

moi1971 : C'est vrai que je ne pense pas souvent en Debug.Lo sa m'éviterais beaucoup de soucis , le problème viens toujours de l'animation de Rechargement et de Course , celle de Rechargement s'interrompe et celle de course ne s’exécute pas , je vais vérifier , lol merci pour les Debug.Log "Caca" sa me fait plaisir autant de réponse avec humour

----------------------------------------------------------------------------------------------------------------------------------

J'ai enfin réussis à faire courir mon personnage mais l'animation ne ce joue pas en entier , puis les touches s'inversent je dois d'abord presser AltLeft puis UpArrow

J'ai tenter ceci mais sans grand succès afin qu'après le relachement des touches le personnage stop l'animation , que ce soit la touche UpArrow , AltLeft ou même les deux réunis.

Code : Tout sélectionner

if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKeyDown(KeyCode.UpArrow))
        {
            Debug.Log(" Cas 3 ");
            anim.SetBool("Marche", false);
            anim.SetBool("Course", true);
        }

        if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKeyUp(KeyCode.UpArrow))
        {
            Debug.Log(" Caca ");
            anim.SetBool("Marche", false);
            anim.SetBool("Course", false);
        }
J'ai essayer plusieurs combinaison de Up et Down mais sans trouver la bonne , je sais en tout cas qu'il s'agit d'un problème de relâchement ou de pression de la touche...


L'animation de rechargement bloque encore elle ce coupe , il doit y avoir un petit problème soit sur le loop time soit sur une transition mais les Debug.Log m'indique bien les erreurs ce situent !!!

Merci.

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

Re: [DB-AL]Animation: changer d'état

Message par boubouk50 » 28 Oct 2016 15:14

D'ailleurs, par curiosité pour savoir si le tutoriel utilisait des conditions telles que: !Input.GetKey () , j'ai zieuté vite fait...
Il utilise bien Input.GetKeyUp ().
IkaGame a écrit : je prendrais sa en compte mais j'essaie de comprendre un maximum le tutoriel
Mouais...
Les tutoriels sont là pour que tu apprennes, si tu ne les suis pas correctement ou ne cherches pas à savoir ce qui est fait, c'est pas anodin si ta réécriture fonctionne mal...
Un peu plus de rigueur ne te ferait pas de mal si tu veux réellement avancer. Renseigne-toi également ailleurs que ce tutoriel. Il y en a pleins sur les animations, surement dans les Unity Learn, faut chercher un peu.
"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

IkaGame
Messages : 75
Inscription : 13 Oct 2016 15:43

Re: [DB-AL]Animation: changer d'état

Message par IkaGame » 28 Oct 2016 15:33

Image

Oui mais c'est pourtant ce que j'ai tenter , j'ai placé un GetKeyDown & un GetKeyUp mais l'anim de recharge ce bloque et celle de course pareille mais je peut quand même l'éxecuter , je dois pourtant apporter une modif mais je ne vois plus ou , je commence à me perdre :naah:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class AnimationPlayer : MonoBehaviour
{

    private Animator anim;
    public AudioClip RechargeSon;

    // Use this for initialization


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

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

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            anim.SetBool("Marche", true);
            anim.SetBool("Course", false);
        }
        if (Input.GetKeyUp(KeyCode.UpArrow))
        {
            anim.SetBool("Marche", false);
        }

        if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKeyDown(KeyCode.UpArrow))
        {
            Debug.Log(" Cas 3 ");
            anim.SetBool("Marche", false);
            anim.SetBool("Course", true);
        }

        if (Input.GetKey(KeyCode.LeftAlt) && Input.GetKeyUp(KeyCode.UpArrow))
        {
            Debug.Log(" Caca ");
            anim.SetBool("Marche", false);
            anim.SetBool("Course", false);
        }

        if (Input.GetKeyDown(KeyCode.R))
        {
            Debug.Log(" Cas 5 ");
            GetComponent<AudioSource>().PlayOneShot(RechargeSon);
            anim.SetTrigger("Recharge");
        }
    }
}

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

Re: [DB-AL]Animation: changer d'état

Message par Moi 1971 » 28 Oct 2016 16:09

Je t'ai dit "Tes if sont tous pourris!"
Si je suis la logique de ton code : Quand j"appuis surs les 2 touches "KeyCode.LeftAlt" et "KeyCode.UpArrow"
Alors :
=> anim.SetBool("Marche", true);
=> anim.SetBool("Course", false);
=> Debug.Log(" Cas 3 ");
=> anim.SetBool("Marche", false);
=> anim.SetBool("Course", true);
:!: :!: :!: :!:
Est-ce vraiment tout cet enchainement que tu veux voir se réaliser quand tu appuis sur les deux touchent? Et en plus 25 fois par secondes!!!
Un petit conseil, pour le moment, ne mélange pas les évènements "Input.GetKey" et "Input.GetKeyUp". C'est déjà asses compliqué pour toi. Restes avec les "Input.GetKey" et quand ça fonctionnera tu pourras optimiser avec les Up/Down adéquat.

Répondre

Revenir vers « Scripting »