[Résolu] [DB-AL] Jouer une animation à l'envers depuis un script.

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Répondre
Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

[Résolu] [DB-AL] Jouer une animation à l'envers depuis un script.

Message par TheParadox » 18 Juil 2017 19:30

Bonjour.

Tout est dans le titre.
Comment jouer une animation à l'envers depuis un script ?
Pour la jouer à l'endroit, j'utilise "Animation.Play() ;"
Mais pour la jouer à l'envers... Je suppose qu'il doit y avoir une option à rajouter entre les parenthèses...
Je ne sais pas non plus comment changer sa vitesse d’exécution.

Savez-vous comment faire ?
Dernière édition par TheParadox le 19 Juil 2017 15:20, édité 1 fois.
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL] Jouer une animation à l'envers depuis un script.

Message par Max » 18 Juil 2017 20:26

Bonsoir,
TheParadox a écrit :
18 Juil 2017 19:30
Comment jouer une animation à l'envers depuis un script ?
Pour la jouer à l'endroit, j'utilise "Animation.Play() ;"
Mais pour la jouer à l'envers...
Le genre de chose que je n'ai jamais essayé.
Ceci dit, si on regarde la doc, à travers la fonction 'speed' (AnimationState.speed),
il est dit ceci: A negative playback speed will play the animation backwards..
Donc à regarder éventuellement de ce coté là...
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: [DB-AL] Jouer une animation à l'envers depuis un script.

Message par TheParadox » 18 Juil 2017 23:01

J'avoue ne pas avoir trop compris comment ça fonctionne....
A quoi correspond le ["Walk"] , qui a l'air obligatoire ?
J'ai essayé de rajouter ça dans mon script, l'animation ne se lance plus du tout...
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

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

Re: [DB-AL] Jouer une animation à l'envers depuis un script.

Message par boubouk50 » 19 Juil 2017 09:16

Ceci est un exemple.
anim["walk"] permet de récupérer la bonne animation, ici appelée walk. Il te faut le remplacer par le nom de ton animation.
"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
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: [DB-AL] Jouer une animation à l'envers depuis un script.

Message par TheParadox » 19 Juil 2017 12:40

Je ne comprend toujours pas....

Au début du script, je déclare une Animation que je nomme "Bonjour" (par exemple), en écrivant

Code : Tout sélectionner

public Animation Bonjour
Ensuite, si je me fie à cette page : https://docs.unity3d.com/ScriptReferenc ... speed.html , je dois écrire

Code : Tout sélectionner

Bonjour["Quelquechose"].speed = -1 ;
.
Qu'est ce que je dois écrire à la place de "Quelquechose" ??

J'ai quand même essayé, ça ne marche pas.
L'animation se joue à l'endroit, et Unity me signale 1 erreur rouge.... mais visiblement pas importante puisque qu'il m'oblige pas à la corriger avant le lancer le "mode jeu".

NullReferenceException: GetRef
DetectorPlate.Start () (at Assets/Standard Assets/Scripts/Objects/Interuptors/DetectorPlate.cs:19)

Je devrais peut être utiliser un Animator, mais malgré tout les tutos que j'ai regardé, je n'arrive pas à le faire fonctionner.....

(Je code en C#).
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

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

Re: [DB-AL] Jouer une animation à l'envers depuis un script.

Message par boubouk50 » 19 Juil 2017 13:26

Si on avait ton code en entier, peut-être qu'on pourrait t'aider...
"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
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: [DB-AL] Jouer une animation à l'envers depuis un script.

Message par TheParadox » 19 Juil 2017 14:04

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DetectorPlate : MonoBehaviour {

	public bool touched ;
	public string tag;
	public GameObject Influence ;
	public Animation On ;
	public Animation Attaches;
	public bool attaches ;

	// Use this for initialization
	void Start () {
	}

	// Update is called once per frame
	void Update () {
		if (touched) {
			Influence.SetActive (true);
			On.Play ();
			if (!attaches) {
				Attaches.Play();
				attaches = true;
			}
		} 
		else {
			Influence.SetActive (false);
			if (attaches) {
				Attaches.Play (//à l'envers);
				attaches = false;
			}
		}
			
	}
	void OnTriggerStay(Collider collider) {
		if (collider.GetComponent<Collider>().tag == tag) {
			if (collider.GetComponent<ReactShotBlock>().gravity == true) {
				touched = true;
			}
			else {
				touched = false ;
			}
		}
	}
	void OnTriggerExit(Collider collider) {
		if (collider.GetComponent<Collider>().tag == tag) {
			touched = false;
		}
	}

}
Ce script à pour but d'activer la plaque de pression si un objet avec un certain tag et avec sa gravité activée la touche.
Quand elle s'active, on joue l'animation On et Attaches.
Si l'objet ne touche plus la plaque ou que sa gravité se désactive, on joue l'animation Attaches à l'envers.
Là bien sûr, l'animation se joue à l'endroit puisque je ne connais pas la commande pour la jouer à l'envers.
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

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

Re: [DB-AL] Jouer une animation à l'envers depuis un script.

Message par boubouk50 » 19 Juil 2017 14:16

Tu n'as qu'un seul clip attaché?

Code : Tout sélectionner

Attaches[Attaches.clip.name].speed = -1f;
Il faudrait aussi tester si le clip par défaut est associé pour éviter une erreur d'accès...

Ton erreur ligne 19 est résolue? Parce qu'ici, la ligne 19 est celle de l'Update () qui est juste donc, ce doit être une autre ligne maintenant...
Toutes tes variables publiques sont renseignées dans l'Inspector? (Influences, Attaches, On, etc)
"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
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: [DB-AL] Jouer une animation à l'envers depuis un script.

Message par TheParadox » 19 Juil 2017 14:38

Ça à l'air d'être ça.
Mais l'animation, au lieu de se jouer à l'envers, se met directement au début.
En gros, cette animation fait se lever des genres de barres qui attachent l'objet à la plaque.
Quand je la joue à l'endroit, ça fonctionne très bien.
Mais à l'envers, les barres redescendent instantanément au lieu de s'animer.

J'avais lu quelque part qu'il fallait préciser à quel moment de l'animation on voulait la lancer, avec AnimationState.time je crois.
Comme mon animation dure 1 s, j'ai tenté de rajouter : Attaches [Attaches.clip.name].time = 60f .
Mais ça ne fonctionne pas...
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Avatar de l’utilisateur
TheParadox
Messages : 84
Inscription : 12 Juil 2017 19:54
Localisation : France

Re: [Résolu] [DB-AL] Jouer une animation à l'envers depuis un script.

Message par TheParadox » 19 Juil 2017 15:22

C'est bon j'ai trouvé.
Il fallait marquer : Attaches[Attaches.clip.name].time = 1 ;
Il faut donc marquer le temps en secondes.

Merci pour l'aide ! ;-)
Une seule chose est sûre : rien n'est certain, car cette phrase est un mensonge.

Répondre

Revenir vers « Scripting »