Page 1 sur 4

[Résolu] [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 11:52
par freepl
Bonjour

J'ai réalisé un personnage avec Mixamo avec plusieurs animations.
Le personnage marche, est en attente en baillant, monte et descend des escaliers ( animation de descente à faire)

Dans Inspector j'ai complété le script Animation avec celles-ci
Andromeda_baille
Andromeda_marche
Andromeda_montee_escalier
Andromeda_montee_escalier ( dupliquée de la précédente car je dois la modifiée sur Maya en descente_escalier)

Quand je lance la scène, le script me dit que les animations n'existent pas alors qu'elles sont visibles dans Project !?
Z041.jpg
Z041.jpg (74.61 Kio) Consulté 3424 fois


Le prefab à utiliser est Pieton_9.
Clic sur Corps
Z042.jpg
Z042.jpg (9.7 Kio) Consulté 3424 fois
Z043.jpg
Z043.jpg (88.48 Kio) Consulté 3424 fois


Code de base

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class PietonAnimationEscalier : MonoBehaviour {

	private TrajetVl trajetVl;
	public Animation anim;
	public string idle, walk, montee, descente;
	public bool chien;

	void Start () {
		if (chien)
			trajetVl = transform.parent.parent.GetComponent<TrajetVl>();
		else 
			trajetVl = transform.parent.GetComponent<TrajetVl>();
	}

	// Update is called once per frame
	void Update () {
		if (trajetVl.kmh == 0) {
			anim.Play(idle);
		} 
		if (trajetVl.kmh == 4.9) {
			anim.Play(montee);
		} 
		if (trajetVl.kmh == 4.8) {
			anim.Play(descente);
		} 
		else {
			anim.Play(walk);
		}
	}
}
Voici le perso
https://melanissimo-ng.din.developpemen ... dyy7I-rNMw

code erreur

Code : Tout sélectionner

The animation state Andromeda_marche could not be played because it couldn't be found!
Please attach an animation clip with the name 'Andromeda_marche' or call this function only for existing animations.
UnityEngine.Animation:Play(String)
PietonAnimationEscalier:Update() (at Assets/SCRIPT/PietonAnimationEscalier.cs:23)
Merci du coup de main

Ps : J'espère être dans la bonne section cette fois-ci car j'ai le choix entre script ou animation.

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 12:18
par boubouk50
As-tu bien orthographié les noms des animations en respectant la casse?
Je vois que les strings d'animation commencent par une minuscule alors que le nom des animations par une majuscule.

Sinon, mis à part cela, ton code est inutile.
Dans ton Update (), tu vas continuellement jouer la première frame de l'animation walk ou descente si tu vas à 4.8km tout pile.
Il faut lier les conditions pour pas qu'elles se supplantent. Ici seules les deux dernières le sont avec le else, donc elles primeront sur les 2 premières. Un switch serait adapté.
Aussi, l'important c'est la vitesse, pas l'animation, donc tout devrait décliner de celle-ci. Tu devrais définir un changement de vitesse et pas un test constant.

Par exemple:

Code : Tout sélectionner

void Update () {
	if (currentSpeed != trajetVl.kmh) {
		UpdateAnimation (trajetVl.kmh);
		currentSpeed = trajetVl.kmh;
	}
}

private void UpdateAnimation (float _speed) {
	switch (Math.Round(_speed*10)) {
		case 0: anim.Play (idle);
			break;
		case 48: anim.Play (descente);
			break;
		case 49: anim.Play (montee);
			break;
		case default: anim.Play (walk);
			break;
	}
}
Ici, tu ne joues une animation que si la vitesse a changé. Les animations sont séparées en fonction de la vitesse (redéfinie par un entier arrondi) et ne peuvent être supplantées.

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 12:31
par freepl
Salut

J'ai terminé mon perso tard hier soir et j'ai fait cette erreur.
Je viens de modifier mais l'erreur est toujours présente.
Z044.jpg
Z044.jpg (37.58 Kio) Consulté 3410 fois

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 12:37
par boubouk50
Je crois donc qu'on en revienne au même point que ton précédent post: Les animations doivent être en Legacy.
J'ai aussi édité ma réponse précédente (pour d'autres soucis à venir)

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 12:56
par freepl
Exact pour le legacy. J'ai mis intentionnellement en Humanoïd car je l'avais vu sur un tuto dédié à Mixamo.
J'ai donc mis les trois animations en Legacy.
Le perso se déplace en marchant mais normalement en touchant un objet avec le script ci-dessous

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Panneau : MonoBehaviour {
	//choix vitesse du panneau
	public float vitesse;
}
Sa vitesse doit passer à 4.9 comme renseignée
Z045.jpg
Z045.jpg (11.71 Kio) Consulté 3398 fois
Et une fois vitesse = 4.9, l'animation de montee doit être active, ce n'est pas le cas.
Le perso continue d'avancer.
Par contre celle à v=0 est actve.
Mon script de changement d'animation me semble bon .

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class PietonAnimationEscalier : MonoBehaviour {

	private TrajetVl trajetVl;
	public Animation anim;
	public string idle, walk, montee, descente;
	public bool chien;

	void Start () {
		if (chien)
			trajetVl = transform.parent.parent.GetComponent<TrajetVl>();
		else 
			trajetVl = transform.parent.GetComponent<TrajetVl>();
	}

	// Update is called once per frame
	void Update () {
		if (trajetVl.kmh == 0) {
			anim.Play(idle);
		} 
		if (trajetVl.kmh == 4.9) {
			anim.Play(montee);
		} 
		if (trajetVl.kmh == 4.8) {
			anim.Play(descente);
		} 
		else {
			anim.Play(walk);
		}
	}
}

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 13:45
par freepl
Je viens de lire ton edit :roll:

si j'ai bien compris mon script d'origine fonctionne car je n'ai que 2 animations, soit l'une soit l'autre.
Pour plus il faut ton système.
J' ai modifié le script mais j'ai une erreur avec les accolades alors qu'elles sont bien par paire.
le script

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class PietonAnimationEscalier : MonoBehaviour {

	private TrajetVl trajetVl;
	public Animation anim;
	public string idle, walk, montee, descente;
	public bool chien;

	void Update () {
		if (currentSpeed != trajetVl.kmh) {
			UpdateAnimation (trajetVl.kmh);
			currentSpeed = trajetVl.kmh;
		}
	}
	
	private void UpdateAnimation (float _speed) {
		switch (Math.Round(_speed*10)) {
		case 0: anim.Play (idle);
			break;
		case 48: anim.Play (descente);
			break;
		case 49: anim.Play (montee);
			break;
		case default: anim.Play (walk);
			break;
		}
	}
}
le code erreur

Code : Tout sélectionner

Assets/SCRIPT/PietonAnimationEscalier.cs(28,17): error CS8032: Internal compiler error during parsing, Run with -v for détails
Assets/SCRIPT/PietonAnimationEscalier.cs(27,29): error CS1525: Unexpected symbol `default:'
Je dois utiliser la touche v ?

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 17:34
par Max
Salut,

Ce n'est pas case default: mais simplement default:.
Pareil, je pense que c'est plutôt Mathf.Round() au lieu de Math.Round()
Et ta variable currentSpeed, elle sort d'où. Car elle n'est pas déclarée dans ton script.

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 18:16
par freepl
salut
Pour la variable currentspeed, c'est en fait la variable trajetVl.kmh qui me renseigne sur la vitesse (rectifié).

J'ai modifié mais autre erreur, il ne semble pas reconnaître

Code : Tout sélectionner

(Mathf.Round(_speed*10)

Code : Tout sélectionner

Assets/SCRIPT/PietonAnimationEscalier.cs(20,17): error CS0151: A switch expression of type `float' cannot be converted to an integral type, bool, char, string, enum or nullable type
code complet

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class PietonAnimationEscalier : MonoBehaviour {
	
	private TrajetVl trajetVl;
	public Animation anim;
	public string idle, walk, montee, descente;
	public bool chien;
	
	void Update () {
		if (trajetVl.kmh != trajetVl.kmh) {
			UpdateAnimation (trajetVl.kmh);
			trajetVl.kmh = trajetVl.kmh;
		}
	}
	
	private void UpdateAnimation (float _speed) {
		switch (Mathf.Round(_speed*10)) {
		case 0: anim.Play (idle);
			break;
		case 48: anim.Play (descente);
			break;
		case 49: anim.Play (montee);
			break;
		default: anim.Play (walk);
			break;
		}
	}
}
PS : comme vous le savez je fais des maquettes de projet routier. Du point de vue routier, tout fonctionne parfaitement, les feux, les vitesses, les priorités.J'aimerai pouvoir ajouter des persos en les créant moi-même ( ça j'y arrive, maya, Mixamo) et leur mettre 4 animations : idle, marche, montée et descente des escaliers.
Depuis mercredi dernier , pratiquement 7 jours, j'essaie mais je tourne en rond. Il ne me manque que ce petit plus pour avoir un super rendu. Actuellement mes perso des animations sont en low ply et en texure de basse qualité.
Les nouveaux sont bcp mieux.

Merci à tous pour vos coup de main.

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 04 Nov 2019 18:38
par boubouk50
Le code erreur explique tout il faut un cast en int

Code : Tout sélectionner

((int)Mathf.Round(_speed*10)
Concernant ton premier code, il ne fait pas que les 2, il fait soit le premier, soit le deuxième, soit aucun des deux, ET l'un des deux derniers.
Le problème ce situe dans la structure de tes conditions, elles ne sont pas liées, il faudrait un else entre chaque condition.

Code : Tout sélectionner

if (trajetVl.kmh == 0) {
			anim.Play(idle);
		}
		else {
			if (trajetVl.kmh == 4.9) {
				anim.Play(montee);
			} 
			else {
				if (trajetVl.kmh == 4.8) {
					anim.Play(descente);
				} 
				else {
					anim.Play(walk);
				}
			}
		}
	}

Re: [MY-AL]Animations non trouvées sur perso mais existantes dans Project

Publié : 05 Nov 2019 11:03
par freepl
Bonjour
Merci boubouk50
J'ai modifié le script.
J'ai cette erreur

Code : Tout sélectionner

NullReferenceException: Object reference not set to an instance of an object
PietonAnimationEscalier.Update () (at Assets/SCRIPT/PietonAnimationEscalier.cs:12)
Je comprend bien que le script n'arrive pas à instancier un objet mais sur le net je ne trouve que des articles sur l'erreur cs 1002, (recherche unity erreur cs : 12)

C# error CS 1002 " ; expected " - Unity Answers
Comment savoir quel objet n'est pas créé ?


Code complet

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class PietonAnimationEscalier : MonoBehaviour {
	
	private TrajetVl trajetVl;
	public Animation anim;
	public string idle, walk, montee, descente;
	public bool chien;
	
	void Update () {
		if (trajetVl.kmh != trajetVl.kmh) {
			UpdateAnimation (trajetVl.kmh);
			trajetVl.kmh = trajetVl.kmh;
		}
	}
	
	private void UpdateAnimation (float _speed) {
		switch ((int)Mathf.Round(_speed*10)) {
		case 0: anim.Play (idle);
			break;
		case 48: anim.Play (descente);
			break;
		case 49: anim.Play (montee);
			break;
		default: anim.Play (walk);
			break;
		}
	}
}

si je remets mon code de base pas de msg d'errreur

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class PietonAnimation : MonoBehaviour {

	private TrajetVl trajetVl;
	public Animation anim;
	public string idle, walk;
	public bool chien;

	void Start () {
		if (chien)
			trajetVl = transform.parent.parent.GetComponent<TrajetVl>();
		else 
			trajetVl = transform.parent.GetComponent<TrajetVl>();
	}

	// Update is called once per frame
	void Update () {
		if (trajetVl.kmh == 0) {
				anim.Play(idle);
		} else {
				anim.Play(walk);
		}
	}
}