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

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
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

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

Message par boubouk50 » 06 Nov 2019 11:42

Sérieusement freepl,
Je ne te comprends pas. Tu es sur Unity depuis des années, tu fabriques une maquette énorme depuis tout ce temps, et tu ne sais toujours pas lire une fonction, ni agencer un code. Il serait grand temps de comprendre ce que tu fais, non?

Documentation:
public static bool Approximately(float a, float b);
Approximately est une fonction publique et statique, donc accessible de partout, qui renvoie un booléen et qui prend deux paramètres a et b de type float.
Compares two floating point values and returns true if they are similar. -> LITTERALEMENT: Compare 2 floats (a et b) et renvoie vrai s'ils sont similaires. Tu compares donc a et b. Tu peux donc comparer trajetVl.kmh et 4.9, ou 4.8 ou 5 ou 0.

Code : Tout sélectionner

Mathf.Approximately(trajetVl.kmh, 4.9f);
"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

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

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

Message par freepl » 06 Nov 2019 12:44

Voici ma modif, sans error mais ne fonctionne pas.


Je suis fonctionnaire et donc on nous vire et donc on ne nous commande plus de maquette.
Pour faire bref, cela fait depuis janvier 2017 que je n'ai plus touché à Untiy.
On nous en a commandé une il y a peu. J'ai déjà mis 3 bonnes semaines à me rappeler commetn elle fonctionne.
Et la semaine dernière, on me demande de faire une animation de perso qui marche, monte et descend un escalier et attend sur un quai de gare.

Les perso de ma maquette n'ont que 2 animations, walk et idle, j'ai réussi à les faire fonctionner. Mais à 4, je suis largué.
En plus des scripts, je dois faire d'autres perso avec leurs 4 anim.

Cela fait 2 semaines que je me creuse la tête jour et nuits ( très courtes au passage :( ). Je n'ai contacté le forum que lorsque j'ai vu que je n'y arrivais pas.
Je suis pas loin de lâcher le morceau :triste1:


Pour le perso, avec une vitesse donnée de 4.9, sa vitesse varie de 4.0 à 5.5

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>();

	}
	
	
	
	
	
	
	
	
	void Update () {
		if (trajetVl.kmh != trajetVl.kmh) {
			UpdateAnimation (trajetVl.kmh);
			trajetVl.kmh = trajetVl.kmh;
		}
	}
	
	private void UpdateAnimation (float _speed) {
		if (Mathf.Approximately (trajetVl.kmh, 4.9f));
		{
			anim.Play (descente);
		}
		
		if (Mathf.Approximately(trajetVl.kmh, 4.8f));
		{
			anim.Play (montee);
		}
		
		if (Mathf.Approximately(trajetVl.kmh, 0.0f));
		{
			anim.Play (idle);
		}
		
		if (Mathf.Approximately(trajetVl.kmh, 5.0f));
		{
			anim.Play (walk);
		}
		}
	}


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

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

Message par boubouk50 » 06 Nov 2019 13:11

Je veux bien entendre que les connaissances rouillent, mais savoir lire une documentation ou agencer logiquement un code, c'est comme le vélo, tu repars pas avec des roulettes à chaque nouveau départ.
Soit.

Code : Tout sélectionner

void Update () {
		if (trajetVl.kmh != trajetVl.kmh) {
			UpdateAnimation (trajetVl.kmh);
			trajetVl.kmh = trajetVl.kmh;
		}
	}
Si trajetVI.kmh est différent de lui même alors on lui donne la valeur de lui même (et on update l'animation). Ta condition est mauvaise. Tu dois détecter un changement de vitesse, donc un changement par rapport à une vitesse précédente stockée quelque part. Aussi, cette condition ne fonctionnera que si la vitesse change suffisamment et pas petit à petit.
Et comme dit il y a peine 1h, NE PAS COMPARER DES FLOATS AVEC == ou !=.
"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

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

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

Message par freepl » 06 Nov 2019 13:49

J'ai regardé dans le scrip de trajectoire.
Il y a la vitesse donné ( Kmh) et la réelle ( Kmh Actuel)

Tant que le perso ne touche pas d'objet trigger de changement de vitesse, Kmh = Kmh Actuel
si on touche alors Kmh et Kmh Actuel ne sont plus les mêmes cat Kmh Actuel a des amplitudes.

sans toucher de trigger vitesse
Z001.jpg
Z001.jpg (22.95 Kio) Consulté 3883 fois
Après contact avec un trigger vitesse
Z002.jpg
Z002.jpg (21.11 Kio) Consulté 3883 fois
La partie du script de trajetVl

Code : Tout sélectionner

	public GameObject target_Path;
	public float kmh; // vitesse voulue
	public float kmhActuel; // vitesse reelle
	public float mEntrePoint = 5.0f;
	private float time;
Code modifié mais kmhActuel ne doit pas être au bon endroit

Code : Tout sélectionner

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

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

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

Message par boubouk50 » 06 Nov 2019 15:10

Je me sens réellement l'envie d'abandonner tellement c'est n'importe quoi. :pascontent2:
Maintenant, tu as plusieurs vitesses sur un objet, ça n'a pas de sens.
Tu n'enregistres pas ce que je te dis ou bien tu lis en diagonale ou bien tu comprends mal et tu finis par coder tout de travers. Il n'y a aucune logique, aucune réflexion, juste du bidouillage de quelqu'un de perdu. Tout a été déjà dit et même répété dans ce fil de discussion concernant la logique du code pour mettre à bien ton objectif. Prend donc du recul, supprime ce que tu as fait et essaie de réfléchir logiquement au problème. Nager dans la même soupe en y ajoutant de l'eau ne la fera pas devenir une piscine mais bel et bien une soupe à l'eau.
Alors je vais le faire autrement: DEFINIR LES CONDITIONS
Tu as 3 animations de marche: monter / descendre / marcher
Tu as 1 animation d'attente.
Ce que je ne sais pas: comment est contrôlé le personnage? Est-il autonome? Suit-il un chemin? Est-ce que tout est prédéfini?
En supposant qu'il soit autonome, il est soumis à l'environnement. Celui-ci lui donne donc des éléments de contrôle sur sa vitesse. S'il doit s'arrêter, s'il doit accélérer ou ralentir. Il peut donc par ce biais lui transmettre les informations nécessaires au changement d'animation.
En supposant qu'il soit contrôlé par l'utilisateur, il est soumis aux Inputs. Les inputs lui permettent de savoir quand marcher ou attendre. Par contre, pas de savoir s'il monte/descend/marche (c'est pour cela que j'ai séparé les animations en 1+3). Tu me parles de trigger, je suppose qu'ils servent à ça. Comme dans le premier cas, ils peuvent fournir l'information d'entrée ou de sortie donc de montée, de descente et de marche.

En le voyant comme ceci, cela te parait-il plus simple?
"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

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

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

Message par freepl » 06 Nov 2019 15:17

le personnage suit un chemin. Quand il rencontre un trigger, c'est lui qui lance l'animation indexée à la vitesse.
Et effectivement, je sature complètement.

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

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

Message par boubouk50 » 06 Nov 2019 15:25

C'est donc le fonctionnement le plus simple:

Ton trigger doit changer la vitesse ET l'animation.
Je suppose que tu as une fonction OnTriggerEnter () et OntriggerExit () sur ton personnage?
Balance.
Sinon, comment joues-tu sur la vitesse?
"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

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

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

Message par freepl » 06 Nov 2019 16:03

Pour jouer sur la vitesse c'est un cube trigger , tag ModifVitesse et layer PanneauPieton, avec ce script

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Panneau : MonoBehaviour {
	//choix vitesse du panneau
	public float vitesse;
}
le personnage
www.grosfichiers.com/28Hq6zmSTGw


Le perso est fait avec
un empty Parent , tag PIETON et layer pietons, Rigidbody, capsule collider et 2 scripts : SelectVl et TrajetVl
TrajetVl est basé sur ItWeen

avec en enfants dans Hierarchy
un Detecteur (mesh collider)
2 cameras
Le corps du perso (avec des scripts)
Z003.jpg
Z003.jpg (270.01 Kio) Consulté 3835 fois



SelectVL

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class SelectVl : MonoBehaviour {

	void OnMouseUp () {
		GameObject.Find ("GestionCamera").GetComponent<GestionSelectionVl>().SelectVl (transform.gameObject);
	}
}
et le principal de mon programme . C'est lui qui a kmh et kmhActuel
TarjetVL

Code : Tout sélectionner

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
// la fonction de trajet aérien est bloquée
/* Aidé by :
 * Fabian Métayer
 * 27/10/2015
 */
public class TrajetVl : MonoBehaviour {
	public GameObject target_Path;
	public float kmh; // vitesse voulue
	public float kmhActuel; // vitesse reelle
	public float mEntrePoint = 5.0f;
	private float time;
	public float fraction;
	public Transform[] tabtList = new Transform[11];
	public int minTab = 0;
	public Transform detecteur;
	public LayerMask layerPanneau;
	public Collider[] toucheDetecteur;
	public bool coupeDetecteur;
	private Light jourNuit;
	private GameObject eclairage;
	private GameObject eclairageFreins;
	public GameObject clignotantsDroits;
	public GameObject clignotantsGauche;
	private IEnumerator coroutineClignotants;

	public InterieurVl interieur;

	public void DemrageVl () {
		tabtList = new Transform[11];
		TabDynamique ();
		if (transform.FindChild("Detecteur"))
			detecteur = transform.FindChild("Detecteur").transform;

		jourNuit = GameObject.Find("Sky Dome").transform.FindChild("Light").GetComponent<Light>();

		//cherche dans ces enfants un object avec le nom Eclairage
		//si existe alors on ajoute l'object portant le nom "Eclairage" dans la variable eclairage
		if (this.transform.FindChild ("Eclairage")) {
			eclairage = this.transform.FindChild ("Eclairage").gameObject;
		}

		if (this.transform.FindChild ("Eclairage_Freins")) {
			eclairageFreins = this.transform.FindChild ("Eclairage_Freins").gameObject;
			eclairageFreins.SetActive (false);
		}
		
		if (this.transform.FindChild ("Eclairage_Clignotants_droits")) {
			clignotantsDroits = this.transform.FindChild ("Eclairage_Clignotants_droits").gameObject;
			clignotantsDroits.SetActive (false);
		}

		if (this.transform.FindChild ("Eclairage_Clignotants_gauche")) {
			clignotantsGauche = this.transform.FindChild ("Eclairage_Clignotants_gauche").gameObject;
			clignotantsGauche.SetActive (false);
		}

		StartCoroutine("WalkThePath");
	}

	public void TabDynamique () {
		fraction = 0.1f;
		int count = 0;

		for (int i = 0; i < 11; i++) {
			if (minTab+i < target_Path.transform.childCount) {
				tabtList[i] = target_Path.transform.GetChild(minTab+i);
				count++;
			}
		}

		if (minTab+8 < target_Path.transform.childCount)
			minTab += 8;
		else
			minTab += count;
	}

	public void StopCoroutine () {
		StopCoroutine("WalkThePath");
	}

	IEnumerator WalkThePath () {
		while(true){
			time = (tabtList.Length * mEntrePoint)/(kmhActuel / 3.6f);
			transform.position = iTween.PointOnPath (tabtList, fraction);
			fraction += Time.deltaTime / time;
			if (fraction > 1.0f)
				fraction = 0.0f;
			transform.LookAt(iTween.PointOnPath(tabtList, fraction + 0.1f));
			if (kmhActuel < kmh){
				kmhActuel += 0.7f;// acceleration jusqu'à la vitesse kmh 0.7f
			} else if (kmhActuel > kmh && kmh != 0) {
				kmhActuel -= 0.9f;// decceleration douce 0.9
			} else if (kmh == 0) {
				kmhActuel = 0;// on stoppe brutalement le VL
			}

			if (fraction >= 0.9f) //0.9f
				TabDynamique();

			GestionDetecteur ();
			GestionLumiere ();
			GestionFreins ();

			yield return null;
		}
	}

	void GestionDetecteur () {
		if (detecteur != null) {
			if (gameObject.tag == "VEHICULE")
				toucheDetecteur = Physics.OverlapSphere(detecteur.position, 0.75f, layerPanneau);
			else
				toucheDetecteur = Physics.OverlapSphere(detecteur.position, 0.5f, layerPanneau);

			if (toucheDetecteur.Length != 0) {
				foreach (var other in toucheDetecteur) {
					if (other.tag == "CoupeDetecteur") {
						coupeDetecteur = other.GetComponent<CoupeDetecteur>().detecteur;
						kmhActuel = 50.0f;// pour degager les croisements
					}

					if (other.tag == "CoupeDetecteurAutre") {
						coupeDetecteur = other.GetComponent<CoupeDetecteur>().detecteur;
						kmhActuel = 4.0f;
					}

					if (coupeDetecteur == false) {
						if (other.tag == "ModifVitesse") {
							kmh = other.GetComponent<Panneau>().vitesse;
						} else if (other.tag == "EntreeInstersection") {
							kmh = other.GetComponent<Priorite>().vitesse;
						} else if (other.tag == "VEHICULE") {

							if (kmh > other.GetComponent<TrajetVl>().kmh)
							kmh = other.GetComponent<TrajetVl>().kmh;
						} else if (other.tag == "ClignotantsOn") {
							kmh = other.GetComponent<GestionClignotants>().vitesse;
							if (other.GetComponent<GestionClignotants>().trajet == target_Path) {
								ClignotantsOff ();
								if (other.GetComponent<GestionClignotants>().enumClignotants == EnumClignotants.Droites) {
									coroutineClignotants = ClignotantsDroits();
									StartCoroutine (coroutineClignotants);
								} else {
									coroutineClignotants = ClignotantsGauche();
									StartCoroutine (coroutineClignotants);
								}
							}
						} else if (other.tag == "ClignotantsOff") {
							kmh = other.GetComponent<GestionClignotants>().vitesse;
							ClignotantsOff ();
						}
					}
				}
			}

			if (kmhActuel == 0 && toucheDetecteur.Length == 0)
				kmhActuel = 30.0f;

		}
	}

	void GestionLumiere () {
		if (eclairage != null) {
			if (jourNuit.intensity < 0.15f) {
				if (eclairage.activeInHierarchy == false)
					eclairage.SetActive (true);
			}
			else {
				if (eclairage.activeInHierarchy == true)
					eclairage.SetActive (false);
			}
		}
	}

	void GestionFreins () {
		if (eclairageFreins != null){
			if (kmhActuel > kmh+3 || kmhActuel == 0) {
				if (eclairageFreins.activeInHierarchy == false)
					eclairageFreins.SetActive (true);
			} else {
				if (eclairageFreins.activeInHierarchy == true)
					eclairageFreins.SetActive (false);
			}
		}
	}

	IEnumerator ClignotantsDroits () {
		if (clignotantsDroits != null) {
			while (true) {
				clignotantsDroits.SetActive (true);
				yield return new WaitForSeconds (0.3f);
				clignotantsDroits.SetActive (false);
				yield return new WaitForSeconds (0.3f);
			}
		}
	}

	IEnumerator ClignotantsGauche () {
		if (clignotantsGauche != null) {
			while (true) {
				clignotantsGauche.SetActive (true);
				yield return new WaitForSeconds (0.3f);
				clignotantsGauche.SetActive (false);
				yield return new WaitForSeconds (0.3f);
			}
		}
	}

	void ClignotantsOff () {
		if (coroutineClignotants != null) {
			StopCoroutine (coroutineClignotants);

			if (clignotantsDroits != null)
				clignotantsDroits.SetActive (false);
			if (clignotantsGauche != null)
				clignotantsGauche.SetActive (false);
			 
			coroutineClignotants = null;
		}
	}

}


ensuite sur le corps du perso , tag PIETON et layer pietons, avec le script PietonAnimationEscalier
Animation ( les 3 , la quatrième ,descente escalier, je dois la faire)
Z004.jpg
Z004.jpg (237.48 Kio) Consulté 3835 fois


La création des perso se fait un partir de ce script
choix du perso aléatoire dans un groupe donné, et choix de sa texture aléatoire

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class DebutRouteAutre1Groupe : MonoBehaviour {

	public string chemin_Nom;
	public int nombres;

	public Trajets[] trajets;
	private int choixTrajet;
	
	// pour multiplier le temps d'apparition des vl la nuit
	public float multiplicateurNuit = 1.0f; 
	// temps apparition entre chaque voiture choisi au hasard
	public float[] tempsApparition = new float[0]; // dans inspector donner le nombre de temsp puis les renseigner
	//choisis un temps aléatoire
	private int choixTemps;
	private float temps;

	private bool finStart;
	private Light jourNuit;

	void Start () {
		choixTemps = UnityEngine.Random.Range(0,tempsApparition.Length);
		choixTrajet = UnityEngine.Random.Range(0,trajets.Length);

		for (int i = 0; i < trajets.Length; i++) {
			CreationVlDepart (i);
		}
		
		// 1 ° gamobject car seul dans la hierarchy.on va chercher sky Dome
		// je prends son enfant Light
		// dans Inspector on prend Light
		
		jourNuit = GameObject.Find("Sky Dome").transform.FindChild("Light").GetComponent<Light>();
		finStart = true;
	}

	// Update is called once per frame
	void Update () {
		if (finStart && Time.timeScale != 0) {
			temps += Time.fixedDeltaTime;
			
			// on multiplie le temps d'apparition si light < à 0.15
			float tempsTempoApparition = 0.0f;
			if ( jourNuit.intensity < 0.15f) {
				tempsTempoApparition = tempsApparition[choixTemps] * multiplicateurNuit;
			}
			else  {
				tempsTempoApparition = tempsApparition[choixTemps];
			}
			
			//automatiquement
			if (temps >= tempsTempoApparition) {
				CreationVl(trajets[choixTrajet].trajet, trajets[choixTrajet].mEntrePoint, trajets[choixTrajet].vitesse, 0);
				choixTemps = UnityEngine.Random.Range(0,tempsApparition.Length);
				choixTrajet = UnityEngine.Random.Range(0,trajets.Length);
				temps = 0;
			}
		}
	}

	void CreationVlDepart (int countTrajet) {
		if (trajets[countTrajet].departVl.Length != 0) {
			for (int i = 0; i < trajets[countTrajet].departVl.Length; i++) {
				CreationVl (trajets[countTrajet].trajet, trajets[countTrajet].mEntrePoint, trajets[countTrajet].departVl[i].vitesseDepart, trajets[countTrajet].departVl[i].positionDepart);
			}
		}
	}

	public void CreationVl (GameObject trajet, float metre, float vitesseFraction, int position) {

		int choixVl = UnityEngine.Random.Range(1,nombres+1);

		GameObject instance = Instantiate(Resources.Load(""+chemin_Nom+choixVl,typeof(GameObject))) as GameObject;

		//modif du non
		instance.name += trajet.name;
		//change la postion de l'object dans le scéne
		//donc transform = à l'obejct qui contient le script DebutRoute
		instance.transform.SetParent(transform);

		if (GetComponent<TrajetVl>() != null) {
			//set le parcour sur l'object
			instance.GetComponent<TrajetVl>().target_Path = trajet;
			//modif la vitesse de l'object
			instance.GetComponent<TrajetVl>().kmh = vitesseFraction;
			instance.GetComponent<TrajetVl>().kmhActuel = vitesseFraction;
			instance.GetComponent<TrajetVl>().minTab = position;
			instance.GetComponent<TrajetVl>().mEntrePoint = metre;
			instance.GetComponent<TrajetVl>().DemrageVl();
		} else {
			//set le parcour sur l'object
			instance.GetComponentInChildren<TrajetVl>().target_Path = trajet;
			//modif la vitesse de l'object
			instance.GetComponentInChildren<TrajetVl>().kmh = vitesseFraction;
			instance.GetComponentInChildren<TrajetVl>().kmhActuel = vitesseFraction;
			instance.GetComponentInChildren<TrajetVl>().minTab = position;
			instance.GetComponentInChildren<TrajetVl>().mEntrePoint = metre;
			instance.GetComponentInChildren<TrajetVl>().DemrageVl();
		}
	}
}
Merci beaucoup

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

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

Message par boubouk50 » 06 Nov 2019 16:25

Code : Tout sélectionner

if (coupeDetecteur == false) {
	if (other.tag == "ModifVitesse") {
		kmh = other.GetComponent<Panneau>().vitesse;
	}
	...
}
C'est ici que tout se joue, tu changes la vitesse, donc tu dois changer d'animation en fonction.
Bon clairement, je ne vais pas m'amuser à te faire un code fonctionnel, sinon je devrais tout changer, mais je vais te donner une solution qui fonctionne, donc pas la meilleure, mais facile.
Dans TrajetVl.cs

Code : Tout sélectionner

if (coupeDetecteur == false) {
	if (other.tag == "ModifVitesse") {
		kmh = other.GetComponent<Panneau>().vitesse;
		//Ici tu modifies la vitesse donc tu as touché un trigger, donc tu dois changer d'animation. Faisons-le en fonction de la vitesse du Panneau, pas celle du piéton. Tu appelles donc la fonction de MàJ des animations du Component PietonAnimationEscalier.
		this.GetComponent <PietonAnimationEscalier >().UpdateAnimation (kmh);
	}
	...
}
Dans PietonAnimationEscalier.cs:

Code : Tout sélectionner

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;
		default: anim.Play (walk);
			break;
	}
}
EN SUPPOSANT QUE LE COMPONENT PietonAnimationEscalier SOIT SUR LE MEME GAMEOBJECT, SINON CHANGER this PAR LA BONNE REFERENCE.

Le code a été fait directement ici, je ne l'ai pas testé (et ne peut pas), il se peut qu'une coquille apparaisse.
Aussi, descente n'existe pas, donc ça plantera si tu dois descendre un escalier tant que tu n'auras pas d'animation. (Tu peux en mettre une pour éviter le plantage en attendant)
"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

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

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

Message par freepl » 07 Nov 2019 12:42

Merci

Je fais un break et je teste la semaine prochaine.

Merci :amen:

Répondre

Revenir vers « (C#) CSharp »