Partage
  • Partager sur Facebook
  • Partager sur Twitter

[UE4] Comment détruire un staticmeshactor

Sujet résolu
    26 février 2019 à 13:11:22

    Bonjour à tous.
    Je cherche a détruire une porte lorsque 8 plateforme_hit_green ont été hit.
    J'arrive seulement à afficher un texte grâce à un print string.
    A la place je voudrais pouvoir détruire la porte.
    Voici les bp que j'ai actuellement. J'espère avoir une aide car je bloque depuis 2 jours.
    Il y a quelque chose que je n'ai pas assimilé sur le fonctionnement mais je débute et j'aimerais comprendre justement ou je cale. Merci.
    BP_Porte
    • Partager sur Facebook
    • Partager sur Twitter
      26 février 2019 à 18:28:31

      Bonjour, il est préférable de creer une box collision qui ensuite lance l'évenement OnBeginOverlap.

      Tu n'a pas besoin de passer par le code de ton personnage ou par ta porte pour la détruire, tu peux tout faire depuis le code de la plateforme.

      J'ai juste référencé laquelle porte tu souhaite détruire par une variable publique(oeil ouvert) :"porteADetruire". Que j'ai référencé dans la scene comme indiqué dans l'image ci dessous.

      Ps: Il est utile de faire un test de classe ou de nom lorsque l'on lance l'évenement car si par hasard un ennemi ou une autre plateforme touche ta plateformeTrigger, l'évenement se lancera aussi

      • Partager sur Facebook
      • Partager sur Twitter
        26 février 2019 à 19:05:55

        Ok. Merci pour la réponse. Mais comment tu fais pour compter le nombre de hit avant de detruire la porte dans le  code de la plateforme. Ma variable ne s'incremente pas.
        • Partager sur Facebook
        • Partager sur Twitter
          26 février 2019 à 21:03:36

          Ce que tu avais fais est globalement correct, cependant je ne vois pas l'utilité de ton input "Addhit".

          J'ai par contre ajouté la variable "IsDetruit" permettant d'éviter de tenter de détruire un objet qui l'a déjà été. Heureusement le BP gère ce type d'erreurs mais ce serait une mauvaise habitude à prendre.

          Je te conseil d'apprendre la base d'au moins 1 langage objets (Java, C#). Cela te permettra de comprendre la logique à utiliser en programmation et les fonctions propres au BP. Par exemple, j'avais des difficultés à comprendre le fonctionnement du "cast to" avant d'apprendre le Java.
          • Partager sur Facebook
          • Partager sur Twitter
            26 février 2019 à 21:14:16

            Mon problème est que ma variable est tjs égale a un. Je pense que c'est le faite qu'elle soit un variable de classe.

            -
            Edité par lanfyp 26 février 2019 à 21:16:22

            • Partager sur Facebook
            • Partager sur Twitter
              26 février 2019 à 21:26:49

              Je pense que c'est dû au fait que tu as oublié de supprimer ta fonction "destroy actor". Qui du coup détruira la plateforme la premiere fois que tu la touche.

              Essaye de faire divers tests avec des prints pour voir aussi si le trigger se lance bien et voir le compteur.

              PS: tente de bien nommer tes variables.

              • Partager sur Facebook
              • Partager sur Twitter
                26 février 2019 à 21:32:05

                En faite j'ai 8 plateformes à détruire. Et quand les 8 sont détruites la porte s'ouvre. Alors en retirant le destroy actor ca marche partiellement. C'est a dire si je touche les 8 plateformes rapidement la variable s'incrémente et si je ne vais pas assez vite elle redescend à 1.

                En tous cas c'est sympa de m'aider.

                Edit: En faite chaque plateforme s'incrémente individuellement. C'est a dire si je saute 8 fois sur la même la porte s'ouvre. Je souhaiterais un système qui détruit chaque plateforme lorsqu'on entre en contact et qui incrémente une variable qui une fois a 8 détruise la porte. C'est pour cela entre autre que j'avais laissé le destroy actor.

                -
                Edité par lanfyp 26 février 2019 à 21:42:42

                • Partager sur Facebook
                • Partager sur Twitter
                  26 février 2019 à 21:56:05

                  D'accord, je n'avais pas du tout compris cela x).

                  Je pensais qu'il fallait toucher par exemple 8 fois la plateforme pour pouvoir détruire la porte.

                  Donc effectivement le que je t'ai donné n'est pas du tout bon. J'aurais fait :

                  Si tu n'utilise qu'une seule fois le systeme des 8 plateformes à détruire dans ton niveau :

                  Begin Overlap -> Branch test si c'est ton character -> get all actor of classes: plateforme ->

                  branch length<=1

                  TRUE  :-> Destroy (PorteADetruire) ->Destroy (Self)

                  FALSE : ->Destroy (Self)

                  Si tu utilise plusieurs fois le Systeme des  plateformes à détruire dans ton niveau (par exemple avec 2 portes dont l'une s'ouvre avec 4 plateformes à détruire et l'autre avec 8 autres plateformes à détruire) :
                  var nbMemePlateforme = 0

                  Begin Overlap -> Branch test si c'est ton character -> setnbMemePlateforme à 0 ->get all actor of classes : plateformes

                  [item] -> cast to plateforme -> branch si PorteADetruire(du for each) == PorteAdetruire (self) --True> nbMemePlateforme++;

                  [completed] -> branchnbMemePlateforme<=1(car ils comptent la plateforme du code donc pas encore détruite) VRAI : -> Destroy (PorteADetruire) -> Destroy Self

                  FAUX : -> Destroy Self

                  Je n'ai pas testé mais pour expliqué mon raisonnement :

                  j'ai tenté de compter le nombre de plateformes dans presentes dans la scene, et si il n'en reste qu'une (celle actuelle qui n'est pas encore détruite), alors on détruit la porte.

                  Pour le deuxieme cas j'ai fais un compteur pour savoir le nombre de plateformes ayant le même actor a détruire (ps : c'est simplifiable mais pas envie de tester).

                  D'ailleurs lorsque tu dis hit, tu signifie que le joueur touche la plateforme en marchant dessus ou alors en tirant dessus? Car si c'est tirer dessus faut effectivement faire un event hit, sinon il faudrait utiliser event overlap pour le fait de marcher dessus.

                  Edit : D'ailleurs si tu souhaite faire un destroy(self). il faut le faire a la fin du code sinon le code risque de s'interrompre.

                  -
                  Edité par coukil 26 février 2019 à 22:02:36

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 février 2019 à 22:10:27

                    Parfait j'ai suivi ton raisonnement de la première solution et ca marche. Quand je parle de hit en effet je parle de marcher dessus. Le nom n'est pas vraiment bien choisis en effet. Je montre l'event graph qui fonctionne afin d'aider d'autre personnes comme moi qui débute. En tout cas merci beaucoup pour ton aide.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [UE4] Comment détruire un staticmeshactor

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