Partage
  • Partager sur Facebook
  • Partager sur Twitter

(Unity) Déclenchement animation avec trigger

Sujet résolu
    5 mars 2017 à 23:19:04

    Salut tout le monde !

    J'ai actuellement un projet de jeu vidéo et j'ai un problème.

    J'aimerai qu'une animation soit jouée quand mon joueur possedant collider 2D (parce que mon jeu est en 2D) rentre en contact avec le triger d'une porte. Dans le GameObject Porte il y a un animator, une animation ( celle qui doit etre jouée ), et un box collider avec la fonction is trigger cochée.

    J'ai crée un script en C# pour activer cette fonction et voila a quoi il ressemble (je viens d'apprendre le C# et ne comprend pas encore toutes ses subtilités)

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Porte : MonoBehaviour {
    
    
    	void OnTriggerEnter2D(Collision other)
    	{
    		if (other.gameObject.tag == "Player")
    		{
    			Porte.animation.Play("Porte");
    		
    		}
    	}
    }

    mais il y a des erreur de compilation. J'ai cherché partout un script correspondant à ma situation ou j'en ai adapté mais aucun ne fonctionne:'(

    Je fais donc appel à vos connaissances pour m'aider.

    Merci d'avance !! :)

    • Partager sur Facebook
    • Partager sur Twitter
    O
      6 mars 2017 à 10:41:44

      Salut,

      Tu devrais regarder ta console pour avoir plus d'infos sur ton erreur de compilation ^^' 

      À vue de nez, je dirais que donne pas le bon argument dans ta fonction : c'est un Collider2D et pas une collision qu'il faut. Je te met la doc en lien histoire que tu check par toi-même : OnTriggerEnter2D.

      J'espère que ça te débloquera :)

      • Partager sur Facebook
      • Partager sur Twitter
        6 mars 2017 à 18:59:54

        Ah oui tu as raison ! Merci beaucoup, je crois que tu as raison !  Là j ai pas mon ordi donc je peux pas test mais je pense que c'est juste.

        Par contre est ce que la ligne servant à jouer l animation est juste ?

        • Partager sur Facebook
        • Partager sur Twitter
        O
          7 mars 2017 à 10:00:03

          À vrai dire, t'as l'air d'utiliser la vieille méthode d'animation. Du coup je vais te donner la plus récente histoire que tu puisses t'en resservir dans d'autres projets. 

          Un petit tuto qui va bien sur les animations dans Unity : Animator Scripting. Ici c'est un personnage, mais ça vaut tout autant pour une porte, un ascenseur ou un poulet rôti. C'est plus facile de gérer tes animations car tu as juste à passer par des changements de propriétés pour activer un événement. Le tuto est en anglais, mais rien qu'en regardant ce qu'il fait tu devrais comprendre.

          Je te laisse te débrouiller avec ça mais si jamais tu veux de plus amples informations, hésite pas ;)

          • Partager sur Facebook
          • Partager sur Twitter
            7 mars 2017 à 17:28:33

            Salut !

            J'ai regardé ton tutoriel et je l'ai pas très bien compris mais ma méthode d' animation est bien non ? Pour une animation avec une seule condition je n 'ai pas besoiun de faire des choses aussi complexe quand dans ton tuto no ?

            Moi je veux juste recupérer le component animator de l'objet qui a les srcipt et jouer à la condition definie l'animation en question.

            PS : pour le collider j'ai testé et t'avait raison . Merci ^^ !

            -
            Edité par Th2o 7 mars 2017 à 17:30:06

            • Partager sur Facebook
            • Partager sur Twitter
            O
              8 mars 2017 à 9:32:38

              Dans ce cas là il faut que tu es une variable de type Animation qui contient ton animation, car l'appel que tu fais ne fonctionnera pas je crois (Porte.animation ça n'existe pas). Après c'est vrai que ça peut être contraignant pour une seule porte de coller un animator, mais si tu veux que ta porte se ferme c'est pas mal. Mais bon osef :p

              Mais dans ton cas, il faut absolument que ton animation soit tag en tant que legacy (si c'est une animation dans unity tu peux plus en faire mais si tu importes une animation depuis 3DSMax par exemple, tu peux le faire depuis l'onglet rig). Et dans ce cas là il te faudrait un truc du genre :

              using System.Collections;
              using System.Collections.Generic;
              using UnityEngine;
              
              public class DoorAnimator : MonoBehaviour {
              
                  Animation myAnimation; // On est obligé de passer par une donnée membre de ta classe car le mot clé 'animation' est deprécié
              
                  void Start()
                  {
                      myAnimation = GetComponent<Animation>(); // il faut que tu ais ajouté un composant Animation à ton objet et que tu renseignes l'animation clip à jouer
                  }
              
                  void OnTriggerEnter(Collider other)
                  {
                      if(other.tag == "Player")
                      {
                          myAnimation.Play();
              
                          //si la ligne précédente est pas bonne
                          //myAnimation.Play("Door");
                      }
                  }
              }
              

              J'ai pas testé, n'ayant pas d'animation en legacy sous la main, mais logiquement l'une ou l'autre devait fonctionner. Bon par contre c'est un peu dégueu car j'ai pas contrôlé si l'animation est bien renseignée, mais au moins ça devrait te mettre sur la voie j'espère.

              Bon courage ;)

              • Partager sur Facebook
              • Partager sur Twitter
                8 mars 2017 à 15:33:59

                Salut !

                Merci beaucoup pour ton script, il est juste par contre l' animation se joue en boucle sans meme que le joueur soit entré dans le trigger.

                Trois dernier trucs par contre : ça  veut dire quoi renseigner  sur l'animation clip a jouer dans la phrase "il faut que tu ais ajouté un composant Animation à ton objet et que tu renseignes l'animation clip à jouer" ?

                 à quoi sert le tag legacy ?

                et j'aimerais jouer l'animation q'une fois donc d'après toi il faut que j' ajoute un variable boléene ou qu j'utilise une fonction ?

                Merci pour toute ton aide  :)

                -
                Edité par Th2o 8 mars 2017 à 16:06:11

                • Partager sur Facebook
                • Partager sur Twitter
                O
                  8 mars 2017 à 16:06:29

                  En fait, avant le système d'animator présent dans unity, il fallait juste importer des animations depuis un logiciel de modélisation 3D. Mais du coup, le contrôle d'animation par script est moins utilisé et les mecs de Unity ont mis l'ancien système en Legacy. Le tag legacy sur l'animation sert à rendre ton animation avec le système du coup.

                  Bah dans ton inspecteur, sur le composant Animation de ton objet, tu dois avoir une case "Animation Clip" si je me trompe pas. Quand je dis de le renseigner, c'est pour dire que tu dois remplir ce champ :p

                  Pour jouer ton animation qu'une seule fois (j'imagine la première fois que tu passes dans ton trigger), un booléen fera très bien l'affaire ;) S'il y a moyen de le faire sans faire cracher le jeu, essaye de désactiver le script sinon. Ça fera un collider actif en moins :) 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 mars 2017 à 11:38:09

                    Salut

                    Merci beaucoup pour ton aide, ça marche !! 

                    Quand même, c'est bien les forums !!

                    :D

                    • Partager sur Facebook
                    • Partager sur Twitter
                    O
                      28 avril 2019 à 18:20:26

                      Bonjour bonjour ^.^

                      Alors voila j'ai un tout petit souci ! j'aimerais créer un script pour que mon personnage sort son épée mais je ne trouve pas de tuto... pourriez vous m'y aider ? ! ( ou bien meme comment incorporer unn objet dans une animation mixamo par exemple)

                      • Partager sur Facebook
                      • Partager sur Twitter

                      (Unity) Déclenchement animation avec trigger

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      • Editeur
                      • Markdown