[DB-AL] Problème d'animation 2D non jouée.

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
KsZiki
Messages : 4
Inscription : 27 Août 2016 12:05

[DB-AL] Problème d'animation 2D non jouée.

Message par KsZiki » 01 Oct 2016 02:27

Bonsoir,
J'ai codé un petit script de mouvement et d'animation pour un personnage 2D (j'ai utilisé des sprites de Mario). Les déplacements fonctionnent, par contre au niveau des animations rien ne fonctionne. L'animation Idle tourne en boucle dans l'animator et les variables d'animation que j'utilise ne sont pas mise à jour pour les transitions entre les animation.

Dans la scène, j'ai divisé le sprite du joueur en trois partie : tête, bras et corps dans un objet vide appelé Mario. Le script de déplacement permet de bouger le Rigidbody2D (Mario et tous les éléments du corps) à droite ,à gauche et permet de sauter, tous ça avec le clavier mais aucune des animations ne sont jouées. Les animations sont situées dans l'objet Mario, le corps qui est une partie de l'objet "Mario" devrait s'animer en utilisant l'axe "Horizontal" avec une valeur créé nommé "Speed" dans l'animator et référée dans mon script de déplacement. Mais cela ne fonctionne pas et la variable vitesse n'est même pas actualisée. Pareil pour l'animation de saut.

Vous auriez une idée ?? Merci d'avance !

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

Re: [DB-AL] Problème d'animation 2D non jouée.

Message par Moi 1971 » 01 Oct 2016 12:14

Bonjour,
Il serait plus simple de nous communiquer ton code dans son ensemble ("script de déplacement")
Ps : utilise les balises code.

KsZiki
Messages : 4
Inscription : 27 Août 2016 12:05

Re: [DB-AL] Problème d'animation 2D non jouée.

Message par KsZiki » 01 Oct 2016 22:11

Si si, bien sûr, je transmet le code :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class PlayerControl : MonoBehaviour {

	float x;

	float acceleration = 20f;
	float maxSpeed = 2.5f;
	float jumpForce = 140f;

	public bool asGrounded;
	public bool asJump;

	private Rigidbody2D rigidbody2d;
	private Animator animatorMario;

	// Use this for initialization
	void Start () {
	
		rigidbody2d = GetComponent<Rigidbody2D> ();
		animatorMario = GetComponent<Animator> ();
	}
	
	// Update is called once per frame
	void Update () {
	
		animatorMario.SetFloat ("Speed", rigidbody2d.velocity.x);
		animatorMario.SetBool ("IsGrounded", asGrounded);
		animatorMario.SetBool ("IsJumped", asJump);
	}

	void FixedUpdate () {

		//Controle au clavier...
		//Déplacement horizontal droite et gauche...
		x = Input.GetAxis ("Horizontal");
		rigidbody2d.AddForce ((Vector2.right * acceleration) * x);

		if (rigidbody2d.velocity.x > maxSpeed && asGrounded == true)
			rigidbody2d.velocity = new Vector2 (maxSpeed, rigidbody2d.velocity.y);

		if (rigidbody2d.velocity.x < (-maxSpeed) && asGrounded == true)
			rigidbody2d.velocity = new Vector2 (-maxSpeed, rigidbody2d.velocity.y);

		//Saut...
		if (Input.GetAxis ("Jump") == 1 && asGrounded == true) {
			rigidbody2d.AddForce (new Vector2 (rigidbody2d.position.x, jumpForce));
		}
	}

	void OnCollisionEnter2D () {

		asGrounded = true;
		asJump = false;
	}

	void OnCollisionExit2D () {

		asGrounded = false;
		asJump = true;
	}
}

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

Re: [DB-AL] Problème d'animation 2D non jouée.

Message par Moi 1971 » 02 Oct 2016 11:21

Re,
pour déboguer le plus simple c'est les Debug.Log (et autres) pour visualiser la valeur des différentes variables. Mais aussi ce qu'il faut faire c'est de toujours vérifier qu'un GetComponent() a fonctionné et il vaut mieux initialiser toutes les variables avec des valeurs par défaut.
Par exemple.

Code : Tout sélectionner

// Use this for initialization
   void Start () {
   
     asGrounded = true;
     asJump = false;
   
      rigidbody2d = GetComponent<Rigidbody2D> ();
      if( rigidbody2d == Null) Debug.Log ("Aie!");
      animatorMario = GetComponent<Animator> ();
      if( animatorMario == Null) Debug.Log ("Caramba!");
   }

Répondre

Revenir vers « (C#) CSharp »