[Résolu] Animation de portes glissantes qui se décalent
[Résolu] Animation de portes glissantes qui se décalent
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 Portes ouvertes en fonctionnement normal au début 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 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
(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 Portes ouvertes en fonctionnement normal au début 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 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.
Re: Animation de portes glissantes qui se décalent
Bonsoir,
comment gères-tu tes animations ?
Qui dit Trigger dit script. Poste le, ça peut aider.
comment gères-tu tes animations ?
Qui dit Trigger dit script. Poste le, ça peut aider.
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
Re: Animation de portes glissantes qui se décalent
Bonjour
Voici le script
Et le package ( il faut faire toucher plusieurs fois ( dès la 5° fois) le cube trigger pour voir le décalage.
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);
}
}
Re: Animation de portes glissantes qui se décalent
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:
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):
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:
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");
}
}
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
Re: Animation de portes glissantes qui se décalent
Je dois donc faire 2 animations?
Ouverture
Fermeture
Ouverture
Fermeture
Re: Animation de portes glissantes qui se décalent
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.
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
Re: Animation de portes glissantes qui se décalent
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
Ouverture
merci
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);
}
}
}
- Pièces jointes
-
- Test_Porte_vitree.zip
- (95.11 Kio) Téléchargé 108 fois
Re: Animation de portes glissantes qui se décalent
Bonjour,
Déjà, configure correctement tes AnimatorControllers. On va essayer de faire simple.
Ils doivent ressembler à ça:
Pour les données de chaque state, voir comme ci-dessous:
Pour les transitions, (idem pour la partie fermeture)
Même chose pour le controller de la porte gauche.
Une fois que tu auras passé cette étape, on passera à la partie code.
Déjà, configure correctement tes AnimatorControllers. On va essayer de faire simple.
Ils doivent ressembler à ça:
Pour les données de chaque state, voir comme ci-dessous:
Pour les transitions, (idem pour la partie fermeture)
Même chose pour le controller de la porte gauche.
Une fois que tu auras passé cette étape, on passera à la partie code.
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
Re: Animation de portes glissantes qui se décalent
pour les données de state je suis sur unity 4.6
- Pièces jointes
-
- Z033.jpg (110.76 Kio) Consulté 3144 fois
-
- Z032.jpg (98.88 Kio) Consulté 3144 fois
-
- Z031.jpg (141.15 Kio) Consulté 3144 fois
Re: Animation de portes glissantes qui se décalent
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 ?
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 (158.47 Kio) Consulté 3141 fois
-
- Z034.jpg (138.54 Kio) Consulté 3141 fois