[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
jmhoubre
Messages : 21
Inscription : 05 Oct 2019 22:05

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

Message par jmhoubre » 07 Nov 2019 16:21

On peut peut-être comparer avec des ">" ?

Code : Tout sélectionner

float valeurAComparer = 7f;

if (valeurAComparer > 5.0) {
    // trucs à faire
    return; // pour cesser de comparer
} else {
    if (valeurAComparer > 4.9) {
        // trucs à faire
        return;
    } else {
        if (valeurAComparer > 4.8) {
            // trucs à faire
            return; // pour cesser de comparer
        } else {
            if (valeurAComparer > 0) {
                // cas par défaut
                // trucs à faire
            }
        }
    }
}

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5128
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

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

Message par boubouk50 » 07 Nov 2019 18:38

C'est le même problème: une comparaison.
4.8999999 ou 4.9000001 ne donnera pas le même résultat.
Soit tu utilises Approximately () doit tu castes en Int pour un résultat fiable.

Qui plus est, la vitesse étant interpolée, tu passeras par 4.9 en descendant de 5.0 à 4.8 ce qui aura pour de lancer une animation pour rien. Avec la possibilité d'une double saute dans les animations.
J'ajoute aussi que l'utilisation de l'Update () peut être proscrite pour éviter des calculs intermédiaires inutiles.
Autant faire correctement les choses.
"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 : 826
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 » 11 Nov 2019 17:58

Bonsoir

Après le test, cela ne va pas.
Le script n'est pas reconnu
ScreenShot053.jpg
ScreenShot053.jpg (24.67 Kio) Consulté 47 fois
Peux-tu m'expliquer
EN SUPPOSANT QUE LE COMPONENT PietonAnimationEscalier SOIT SUR LE MEME GAMEOBJECT, SINON CHANGER this PAR LA BONNE REFERENCE.
Actuellement PietonAnimationEscalier est Corps ,( enfant de pmr_1 )et les animations sont bien sur Corps
ScreenShot052.jpg
ScreenShot052.jpg (61.67 Kio) Consulté 54 fois
Le script de modif de la vitesse TrajetVl est sur pmr_1
Du coup comment modifier celui-ci pour que this prenne le parent (si j'ai bien compris)?

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);
	}
	...
}




Ne serait-ce pas possible et plus simple de passer par les tags ?
Je fais un cube taggué AnmationIdle, un autre AnimationWalk, AnimationMonteeEscalier et enfin un quatrième AnimationDescenteEscalier.
Si mon perso touche l'un de ces tag, on joue l'animation sans toucher à sa vitesse ?
Le code ci dessous ne va pas car le perso marche en permanence même si on lui donne une vitesse = 0 , il devrait se mettre à idle.
Et si dans le code je mets else {anim.Play(idle)} , le perso glisse le long de son trajet en position idle

Le code

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class AnimationMonteeEscalier : MonoBehaviour {
		
		private TrajetVl trajetVl;
		public Animation anim;
		public string idle, walk, montee, descente;

		
		void Start () {	}
		
		// Update is called once per frame
		void Update () {
				
		if (gameObject.tag == "AnimationIdle") {
			anim.Play(idle);
		} 
		if (gameObject.tag == "AnimationMonteeEscalier") {
			anim.Play(montee);
		} 
		if (gameObject.tag == "AnimationDescenteEscalier") {
			anim.Play(descente);
		} 
		else {
			anim.Play(walk);
		}
		}

}
Ou peut-être aussi, 3 cubes trigger si ils sont trigger alors chacun lance une animation sans tenir compte de la vitesse ?

Je cherche toutes les solutions simples pour moi.

Répondre

Revenir vers « (C#) CSharp »