Announcement

Collapse
No announcement yet.

[FR] Attendre qu'une animation soit terminée

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    [FR] Attendre qu'une animation soit terminée

    Bonjour,

    Je suis débutant et je cherche une solution pour attendre qu'une animation du personnage soit terminée pour continuer.

    Exemple : lorsque j'appui sur la touche "R" devant un objet, je souhaite jouer une animation où le perso se baisse puis ramasse. Actuellement, je fais tout simplement un "Play animation" pour jouer l'animation. Sauf que je suis obligé de faire ensuite un "Set animation Mode" pour repasser mon personnage sur mon Anim_BP de idle/marche. Entre les deux je suis obligé de faire un "Delay" (quand c'est possible). Même à mon niveau de débutant, je trouve que c'est pas très propre. Il doit y avoir beaucoup je pense.

    J'avais trouvé une solution qui me semblait assez simple il n'y a pas si longtemps mais je n'arrive absolument pas à remettre la main dessus.

    Si quelqu'un peux me donner une piste je suis preneur.

    En vous remerciant d'avance.
    Last edited by sifusalade; 08-26-2018, 02:35 AM.

    #2
    Salut, je pense que tu devrais faire ça dans l'anim BP. Tu dois passer de ton state "idle/marche" à un state "ramasser" (dans lequel l'anim est jouée). Il y a une condition pour pouvoir passer d'un state à un autre, il te faudra créer un booléen.


    Le nouveau state dans l'anim graph :

    Click image for larger version

Name:	Image-1.png
Views:	34
Size:	58.9 KB
ID:	1520372


    A l'intérieur du state il y a ton anim :

    Click image for larger version

Name:	Image-2.png
Views:	34
Size:	110.1 KB
ID:	1520373


    Tu as ensuite la condition pour rentrer dans le state :

    Click image for larger version

Name:	Image-3.png
Views:	32
Size:	52.5 KB
ID:	1520374


    Et la condition pour en sortir, en général c'est lorsque l'anim est presque finie :

    Click image for larger version

Name:	Image-4.png
Views:	33
Size:	59.9 KB
ID:	1520375


    Il faut maintenant que ton booléen change, tu dois le créer aussi dans ton Character_BP :
    Sans le delai ça n'a pas l'air de marcher mais ça marche avec un delai très court (j'ai même essayé un délai de 0 et ça marche), bref l'important c'est de remettre le booléen sur "faux" dès que l'anim à commencé (ou maximum avant qu'elle finisse) pour eviter que ça tourne en boucle.

    Click image for larger version

Name:	Image-5.png
Views:	33
Size:	36.9 KB
ID:	1520378


    Dernière étape le booléen de l'anim BP doit refléter celui du Character :

    Click image for larger version

Name:	Image-6.png
Views:	34
Size:	136.3 KB
ID:	1520377

    Maintenant en pressant R dans le character le booléen change aussi dans l'anim BP, ce qui déclenche le state "pickUp", l'anim se joue et lorsque qu'elle est à 0.1 sec de la fin ça repasse sur ton ton state "idle" (et là, vu que le booléen est sur false ça ne retourne pas sur pickup à moins de réappuyer sur R).

    Tu me diras si ça marche ou si quelque chose ne te semble pas clair
    Attached Files
    Facebook page : https://www.facebook.com/Otholithe-g...6187709110889/
    YT channel: https://www.youtube.com/channel/UCuS...IIFzVZZVmfniug
    Discord : https://discord.gg/sRaBU3

    Comment


      #3
      Alors là 10 000 mercis !!!

      C'est très gentil d'avoir pris le temps de me donner une réponse aussi précise.
      Je viens de voir la réponse à l'instant, donc je n'ai pas encore testé.

      Je teste ça dès que je peux demain mais ça ma l'air très clair. Et puis c'est bien expliqué, je comprends le cheminement et ça c'est top.

      Je reviendrais dire si ça a marché pour moi. Encore merci.

      Comment


        #4
        Alors, la première chose que j'ai fait en rentrant du boulot est d'allumer l'ordi et de tester ça. Ça marche nickel !!

        Non seulement ça marche, mais en plus j'ai compris le pourquoi du comment.

        (comme quoi, quand on débute, on se complique souvent la vie pour rien )

        Ça marche, c'est simple, et j'ai tout compris. 30 000 mercis de plus

        Comment


          #5
          Super !
          Maintenant tu n'as plus qu'a empêcher ton perso d'avancer pendant l'anim. En effet avancer et ramasser un truc en même temps c'est pas très naturel.
          Si tu n'as pas d'idée pour ça je te ferais d'autres screenshots
          Facebook page : https://www.facebook.com/Otholithe-g...6187709110889/
          YT channel: https://www.youtube.com/channel/UCuS...IIFzVZZVmfniug
          Discord : https://discord.gg/sRaBU3

          Comment


            #6
            Merci beaucoup..
            Je comptais justement m'y attaquer ce soir. J'imagine qu'il faut placer un "Disable input" au début de ma fonction "RamasserItem" (que j'ai dans mon BP du perso) et un "Enable input" à la fin de cette fonction.

            Ceci dit, je suis preneur de voir comment tu fais. En espérant ne pas abuser de ta gentillesse.

            Comment


              #7
              Disable input va t'empecher d'utiliser d'autres fonctions (tu peux avoir envie de pouvoir continuer a tourner la camera pendant que le character fait son anim par exemple).


              Ce qui peut marcher c'est d'agir sur la vitesse max, comme tu peux le voir c'est à 600 par default :

              Click image for larger version

Name:	Image-1.png
Views:	31
Size:	267.8 KB
ID:	1521192

              Tu peux remettre la valeur à 600 après un délai ( la longueur de l'anim environ) dans le characterBP, mais c'est plus intéressant d'utiliser les notifications d'anim, comme ça si l'animation voit sa durée se dilater, l'event sera toujours au même moment (et puis c'est un bon truc à savoir )

              Dans ton anim tu as une barre "notifies", fais un click droit dessus puis Add Notify->New Notify et tu lui donne un nom (j'ai mis "EndAnim") puis sauvegarde. Tu peux ensuite la faire glisser sur la barre pour la mettre vers la fin.
              Click image for larger version

Name:	Image-2.png
Views:	28
Size:	453.7 KB
ID:	1521193

              Dans ton animBP tu peux maintenant créer l'event qui sera declenché par cette notification, et remettre la bonne vitesse au character movement component

              Click image for larger version

Name:	Image-5.png
Views:	31
Size:	181.9 KB
ID:	1521194


              Facebook page : https://www.facebook.com/Otholithe-g...6187709110889/
              YT channel: https://www.youtube.com/channel/UCuS...IIFzVZZVmfniug
              Discord : https://discord.gg/sRaBU3

              Comment


                #8
                Encore merci. Je ne savais pas qu'on pouvais appeler l'event d'un notify. Pour l'instant je ne m'en suis servi que pour mettre des bruits de pas.

                Ta méthode est vraiment très bien. Merci encore pour tes conseils.

                J'ai eu juste un problème avec. J'avais modifié le MaxSpeedWalk par défaut pour le mettre en vitesse de marche. Avec un event à l'appui d'une touche je redéfini ce MaxSpeedWalk sur une vitesse de course (et je remet en vitesse de marche au Relased). Du coup avec ta méthode, lorsque j'appuyais sur la touche pour courrir pendant l'animation, je pouvais déplacer mon perso.

                Pour remédier à ça j'ai essayer mettre un Branch pour tester ta variable PickUpObject au tout début de l'évent.
                Sur le False de ce Branch je continu le script. Sur le True je ne fais rien.
                (sur l'EventGraph du personnage)
                Click image for larger version

Name:	capture1.png
Views:	28
Size:	105.7 KB
ID:	1521301


                Mais ça ne fonctionne pas très bien puisque si j'appui une deuxième fois pendant l'animation. La variable PickUpObject est passé à False entre temps? (Après le delay de 0.2)



                J'ai eu un autre problème (que j'ai corrigé)
                Pendant l'animation, mon perso pouvais encore se trourner. Il ne pouvais plus se déplacer mais il pouvais pivoter. Pour remédier à ça. au moment de définir le MaxSpeedWalk à 0. Je fait aussi un SetRotationScale à 0 - 0 - 0 (dans l'EventGraph du perso).
                Click image for larger version

Name:	capture1.png
Views:	28
Size:	69.1 KB
ID:	1521302


                Je refais ensuite un MaxSpeedWalk 0 - 0 - 540 (dans l'EventGraph de l'animBP du perso) à la fin de mon Event EndAnim (juste après avoir repassé en vitesse de marche).
                Click image for larger version

Name:	capture1.png
Views:	28
Size:	143.9 KB
ID:	1521303

                Comment


                  #9
                  A ce moment là enlève le delai de 0.2 et le set PickUpObject juste après. Au lieu de mettre cette variable sur false ici dans le character, rajoute la plutôt sur ton event dans l'anim BP. Ainsi la variable correspondra réelement à l'état de l'anim
                  Facebook page : https://www.facebook.com/Otholithe-g...6187709110889/
                  YT channel: https://www.youtube.com/channel/UCuS...IIFzVZZVmfniug
                  Discord : https://discord.gg/sRaBU3

                  Comment


                    #10
                    C'est très gentil d'avoir répondu.
                    Cela n'a pas fonctionné. Mais en fait je suis bête, parce que je faisais un Branch au début de mon input de la touche pour courir (Gamepad Left Trigger).
                    Mais, uniquement sur le Pressed. Je suis con. Il fallait aussi le mettre sur le Released. C'est pour ça que je passai systématiquement en vitesse de marche et que je pouvais donc continuer d'avancer pendant l'anim.

                    La solution, en plus de ce que tu m'a indiqué. Est de tester la variable PickUpObjet? sur le Pressed et le Released.

                    Encore merci à toi. Tu m'as beaucoup aidé.

                    Comment


                      #11
                      Je fais pareil sauf que c'est un ennemi qui joue l'animation d'attaque quand il me touche. Je suis dans son BP mais je ne trouve pas le booléen Attack? (j'ai fait la reste avec l'animation) donc je dois faire un Cast To et tout le tralala et quand je lance le jeu en regardant les nodes, le Begin In Hit (Component) envoi un courant dans le Cast To AnimBP_BossZombie (où l'Object est un Cast To ThirdPersonCharacter, pas logique puisque j'y suis déjà) et ensuite rien ne sort du Cast To vers le booléen SET. J'ai essayé de le mettre dans le BP du level, mais non plus... Aurez vous une solution ?

                      Comment

                      Working...
                      X