Page 1 sur 1

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

Publié : 18 Juil 2017 19:30
par TheParadox
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 ?

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

Publié : 18 Juil 2017 20:26
par Max
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à...

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

Publié : 18 Juil 2017 23:01
par TheParadox
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...

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

Publié : 19 Juil 2017 09:16
par boubouk50
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.

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

Publié : 19 Juil 2017 12:40
par TheParadox
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#).

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

Publié : 19 Juil 2017 13:26
par boubouk50
Si on avait ton code en entier, peut-être qu'on pourrait t'aider...

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

Publié : 19 Juil 2017 14:04
par TheParadox

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.

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

Publié : 19 Juil 2017 14:16
par boubouk50
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)

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

Publié : 19 Juil 2017 14:38
par TheParadox
Ç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...

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

Publié : 19 Juil 2017 15:22
par TheParadox
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 ! ;-)