[Résolu] Animation de portes glissantes qui se décalent

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

[Résolu] Animation de portes glissantes qui se décalent

Message par freepl » 03 Déc 2019 19:33

Bonjour

(J'ai mis AL, mais je ne crois pas que l'animation entre dans ce domaine)


J'ai fait un sas avec 2 portes coulissantes. Le mouvement se fait sur 3 secondes.
Un cube trigger est activé par un personnage se qui lance l'animation d'ouverture et de fermeture des portes.
animation simple de déplacement sur Ox de +0.45 cm puis de -0.45 pour une porte et réciproque pour l'autre.

portes fermées à T=0
ScreenShot075.jpg
ScreenShot075.jpg (59.14 Kio) Consulté 3430 fois
Portes ouvertes en fonctionnement normal au début
ScreenShot076.jpg
ScreenShot076.jpg (78.93 Kio) Consulté 3430 fois
Le pb est qu'au fur et à mesure les portes ne se ferment plus complètement
Photo prise au bout de 5mn, les portes restent dans cette position , se déplacent (pour ouvrir l'entrée) mais ne ferment plus
ScreenShot077.jpg
ScreenShot077.jpg (107.2 Kio) Consulté 3430 fois
Les portes se referment lorsque qu'un deuxième personnage active le trigger mais eelles restent ouvertes.
Existe t'il une option sur les mvt faits dans Unity par l'onglet Animation pour remettre parfaitement à 0 les animations ?

Merci


Edit au bout de 15 mn le décalage est si important que les portes ont ouvertes au repos et quand le trigger est activé elles se referment
Dernière édition par freepl le 10 Déc 2019 09:10, édité 1 fois.

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

Re: Animation de portes glissantes qui se décalent

Message par Max » 03 Déc 2019 20:06

Bonsoir,

comment gères-tu tes animations ?
Qui dit Trigger dit script. Poste le, ça peut aider.
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
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Animation de portes glissantes qui se décalent

Message par freepl » 03 Déc 2019 20:25

Bonjour

Voici le script

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

/* Quand le cude est activé ( traversé par la camera ou bien par un personnage) cela lance l'ouverture et la fermeture
des portes de l'ascenceur
( sur 4 secondes pour le mvt complet)
porte_ascenceur_gauche     animation ouverturePortegauche
porte_ascenceur_droite     animation ouverturePortedroite

if trigger 

en js porte_ascenceur_droite.animation.Play("ouverturePortedroite").
GetComponent<Panneau>().vitesse = vitesseReprise;

GetComponent<porte_ascenceur_droite>().animation = ouverturePortedroite; ??
*/


public class DetectionPmrOuvertureFermetureAscenceur : MonoBehaviour {



	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	// Update is called once per frame
	void OuvertureAscenceur () {
		
	}

	// script qui detruit le vl à la fin du parcours 
	// mettre une box other sur les vl
	public IEnumerator OnTriggerEnter (Collider other) { 
		if (other.tag == "VEHICULE" || other.tag == "PIETON" || other.tag == "VELO" || other.tag == "PMR") // destruction du vl
		{
			//GameObject.Find ("porte_ascenceur_droite").GetComponent<animation>().ouverturePortedroite();
			//GameObject.Find ("porte_ascenceur_droite").GetComponent<animation>().ouverturePortegauche();
			GameObject.Find("porte_ascenceur_droit").GetComponent<Animator>().enabled=true;
			GameObject.Find("porte_ascenceur_gauche").GetComponent<Animator>().enabled=true;

			yield return new WaitForSeconds(4);

			GameObject.Find("porte_ascenceur_droit").GetComponent<Animator>().enabled=false;
			GameObject.Find("porte_ascenceur_gauche").GetComponent<Animator>().enabled=false;
				//GameObject.Find ("GestionCamera").GetComponent<GestionSelectionVl>().vl = null;
				//other.transform.FindChild("Camera   PRINCIPALE").SetParent(GameObject.Find ("GestionCamera").transform);
				
			}
			//Destroy(other.gameObject);
		}






}
Et le package ( il faut faire toucher plusieurs fois ( dès la 5° fois) le cube trigger pour voir le décalage.
PMR_Ouverture_Fermeture_Portes_Ascenceur.zip
(54.76 Kio) Téléchargé 100 fois

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

Re: Animation de portes glissantes qui se décalent

Message par Max » 03 Déc 2019 21:53

Re,

Il te faut vraiment appréhender le système d'animation actuel d'Unity. Déjà, sur tes portes tu as en même temps un component Animator et un component Animation. C'est l'un ou l'autre, plus particulièrement Animator (Animation étant déprécié, à éviter donc).

En suite, dans les deux Animators, tu dois avoir un état stable, avec par exemple un paramètre qui va permettre (via le script) de déclencher l'animation d'aller/retour de tes portes, genre:

Image

La transition (montante) pour l'ouverture de la porte va se déclencher grâce au trigger de l'Animator (paramètre OpenClose à gauche), et se terminer (transition descendante) une fois l'animation terminée.

Dans ton script, le Trigger de détection (là on parle du Boxcollider de ta scène) donnerait quelque chose comme celà (en gardant quelque peu ta notation d'origine):

Code : Tout sélectionner

    private Animator asc1;
    private Animator asc2;

    // Use this for initialization
    void Start () 
    {
        asc1 = GameObject.Find("porte_ascenceur_droit").GetComponent<Animator>();
        asc2 = GameObject.Find("porte_ascenceur_gauche").GetComponent<Animator>();
    }


	// script qui detruit le vl à la fin du parcours 
	// mettre une box other sur les vl
	public void OnTriggerEnter (Collider other) 
    {
        // attentd la fin de l'animation avant d'en déclancher une autre
        if( ! asc1.GetCurrentAnimatorStateInfo(0).IsName("OuverturePorteDroite"))
        {   // déclenche le trigger de l'animator de chaque porte
            asc1.SetTrigger("OpenClose");
            asc2.SetTrigger("OpenClose");
        }
    }
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
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Animation de portes glissantes qui se décalent

Message par freepl » 03 Déc 2019 22:09

Je dois donc faire 2 animations?
Ouverture
Fermeture

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

Re: Animation de portes glissantes qui se décalent

Message par Max » 04 Déc 2019 00:02

freepl a écrit :
03 Déc 2019 22:09
Je dois donc faire 2 animations?
Ouverture
Fermeture
Ben cela serait quand même mieux. Là tu as une animation qui est faite d'un seul tenant "ouverture/fermeture", que tu essais de couper au milieux tant bien que mal pour avoir une phase où les portes restent ouvertes. D'où au bout d'un moment ce décalage progressif car tu ne seras jamais pile-poil dans le même timing que tes anim.
L'idéal reste quand même d'avoir deux phases bien distinctes, avec une commande à l'ouverture, puis en suite une commende à la fermeture, chacune avec une animation dédiée.

D'ailleurs, c'est un très bon exercice ce genre de chose, si simple en apparence (ouvrir/fermer des portes), mais qui fait appel à pas mal de fonctionnalités d'unity, et dont la logique et la mise en œuvre n'est finalement pas si évident.
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
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Animation de portes glissantes qui se décalent

Message par freepl » 04 Déc 2019 12:03

Bonjour

J'ai fait 2 mouvements de fermeture ouverture pour chaque porte porte par Animation.
et 2 scripts.


L'actionneur touche le cube trigger et ouvre les 2 portes.
1 Les 2 portes s'ouvrent en décalé
2 Je ne sais pas comment laisser les portes ouvertes jusqu'à ce que l'actionneur touche le cube trigger de fermeture

Fermeture

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
public class TestFermeture : MonoBehaviour {



	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
	
	// Update is called once per frame
	void OuvertureAscenceur () {
		
	}
	
	// script qui detruit le vl à la fin du parcours 
	// mettre une box other sur les vl
	public IEnumerator OnTriggerEnter (Collider other) { 
		if ( other.tag == "PIETON" || other.tag == "PMR") 
		{

			GameObject.Find("Porte_vitree_droite").GetComponent<Animator>().enabled=false;
			GameObject.Find("Porte_vitree_gauche").GetComponent<Animator>().enabled=false;
			
			yield return new WaitForSeconds(1);
			


			
		}
	}







}

Ouverture

Code : Tout sélectionner

using UnityEngine;
using System.Collections;




public class TestOuverture : MonoBehaviour {



	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
	
	// Update is called once per frame
	void OuvertureAscenceur () {
		
	}
	
	// script qui detruit le vl à la fin du parcours 
	// mettre une box other sur les vl
	public IEnumerator OnTriggerEnter (Collider other) { 
		if ( other.tag == "PIETON" || other.tag == "PMR") 
		{

			GameObject.Find("Porte_vitree_droite").GetComponent<Animator>().enabled=true;
			GameObject.Find("Porte_vitree_gauche").GetComponent<Animator>().enabled=true;
			
			yield return new WaitForSeconds(1);
			


			
		}
	}







}
merci
Pièces jointes
Test_Porte_vitree.zip
(95.11 Kio) Téléchargé 106 fois

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

Re: Animation de portes glissantes qui se décalent

Message par Max » 04 Déc 2019 12:44

Bonjour,

Déjà, configure correctement tes AnimatorControllers. On va essayer de faire simple.
Ils doivent ressembler à ça:

Image

Pour les données de chaque state, voir comme ci-dessous:

Image

Pour les transitions, (idem pour la partie fermeture)

Image

Même chose pour le controller de la porte gauche.
Une fois que tu auras passé cette étape, on passera à la partie code.
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
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Animation de portes glissantes qui se décalent

Message par freepl » 04 Déc 2019 13:25

pour les données de state je suis sur unity 4.6
Pièces jointes
Z033.jpg
Z033.jpg (110.76 Kio) Consulté 3121 fois
Z032.jpg
Z032.jpg (98.88 Kio) Consulté 3121 fois
Z031.jpg
Z031.jpg (141.15 Kio) Consulté 3121 fois

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

Re: Animation de portes glissantes qui se décalent

Message par freepl » 04 Déc 2019 13:29

les transitions

Dois-je toucher à transition duration et tout mettre à 0.1 ?
Et pour Exit time, c'est écrit 0.75 ou bien 0.9. J'y touche ?
Pièces jointes
Z035.jpg
Z035.jpg (158.47 Kio) Consulté 3118 fois
Z034.jpg
Z034.jpg (138.54 Kio) Consulté 3118 fois

Répondre

Revenir vers « Unity le logiciel »