Partage
  • Partager sur Facebook
  • Partager sur Twitter

Empêcher la destruction d'une particule - Unity

    22 mai 2017 à 20:43:40

    Bonjour Monde !
    Ou plutôt bonsoir à tous vue l'heure qu'il est pour moi   :lol:

    Je me posais la question de savoir comment, et si, il est possible d’empêcher la destruction d'une particule après la destruction de son émetteur.
    Je m'explique :
      Je créé actuellement un jeu de guerre spatial 3D, ou vous incarnez un petit vaisseau, qui tir de petit laser avec de petit missile, et blablabla ^^
    Pour ce qui est des missiles, ils sont guider et émette une traîné de fumer derrière eux. Mais cette même fumer pose quelque problème de catégorie What de F***
    Effectivement, il y a bien un moment ou le missile touche sa cible, explose, et les codeurs devinerons surement mon "Destroy(gameObject, 0)" 

    Et c'est la que se trouve mon problème car TOUTE mes particules de fumée sont détruite instantanément, puisque que le particuleEmmiter est fils de ce même gameobject, au lieu de se dissiper tout en douceur comme la réalité le ferais.

    Du coup je me demandais es ce que quelqu'un aurais une solution/astuce/MageVaudou à me proposer ? :honte:
    Parce que la je vois pas...

    Cordialement ;)

    -
    Edité par .:Wilo:. 22 mai 2017 à 21:03:24

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      22 mai 2017 à 23:38:11

      Salut, 

      Moi j'ai un bon mage vaudou à te conseiller. 42 rue du marabout à Etnayov. Bon plus sérieusement, je suppose que tu as un système de particules attaché au gameObject qu'est ton missile. Du coup, si ton missile est détruit, tout ses enfants (dont font partie les particules émises) sont détruites en même temps. 

      Une première idée serait de ruser un peu : 

      GameObject missileADetruire = transform.parent;
      transform.parent = null;
      GameObject.Destroy(missileADetruire);
      Je pense que ça devrait te supprimer ton parent mais pas les enfants (mettre ce script sur les enfants).

      Deuxième idée : utiliser DetachChildren() (script sur le parent, je pense que cette solution est meilleure)
      transform.DetachChildren();
      Destroy(gameObject);
      Je n'ai pas testé, mais je suis à peu près certain que les deux fonctionnent.
      Et normalement, après cela les particules mourront toutes seules au bout d'un moment.

      -
      Edité par Anonyme 22 mai 2017 à 23:39:41

      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2017 à 8:18:24

        Merci de l'astuce, je vais pas tester tout de suite car la je vais partir au boulot, mais dis moi il y a pas un risque que mon emeteur de particule ne suivent plus le missile (quoi que non en fait si je le mets dans la gestion de collision) ?
        Ou qu'une fois que le missile à exploser les particules continue à être émise ?

        Cordialement =)

        Repost:

        Au final ta deuxième solutions marche bien, mais il y a encore de la fumée émise après la destruction ^^

        et à tout hasard il y aurais pas une fonction "arrêter l’émission" ?
        Quoi que t’embête pas, maintenant que tu m'as trouvé ça google devrais me donner la fin de solutions =)
        En tout cas merci =)

        -
        Edité par .:Wilo:. 23 mai 2017 à 8:27:02

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          23 mai 2017 à 14:21:03

          Salut, 

          C'est probablement que ton système de particules est un objet enfant de ton missile. Le mieux est de le mettre en component comme ça, dès que le missile est détruit, le système de particules aussi et donc arrête d'émettre. Les particules déjà émises, cependant, sont en enfant de ton missile et donc libérées (délivrées) lorsque que tu fait DetachChildren().

          • Partager sur Facebook
          • Partager sur Twitter
            28 mai 2017 à 13:46:44

            Du coup j'ai essayer et non ca ne marche pas, apparemment les particules ne sont pas enfant du particule system, du coup soit je mets le particule system en enfant, et il continue à émettre après destruction (parce que visiblement ParticuleSystem.Stop (ou .Pause) me fais un gros doigts ^^), sinon les particules sont détruite en même temps que le missile si je met le ParticuleSystem en composant...
            J'essaye de trouver une solution sur le net, mais tout les tutos "apprendre a faire un missile" on le même problème que moi =/
            • Partager sur Facebook
            • Partager sur Twitter
            L'humanité n'a pas lieu d'être quant on éprouve une honte a faire pare de cette espèce...Open mind lead to open doors
            Anonyme
              28 mai 2017 à 19:50:15

              Salut,

              Ach so, effectivement, j'ai confondu avec une fois où j'avais fait un space shooter, mais sans système de particules, et là ça allait.

              Du coup, je pense que du n'a plus qu'à faire un truc un peu tricky : désactiver l'émission de particules, et juste désactiver les components mesh renderer et collider de ton missile et ne le détruire qu'une fois que les particules sont toutes mortes. C'est très moche, mais je n'ai pas d'autre idée pour le moment.

              • Partager sur Facebook
              • Partager sur Twitter
                6 juin 2017 à 15:59:42

                C'est ce que je pensais aussi du coup, mais j'ai peur que ça fasse un peu usine à gaz, j'ai eu des infos assez vague sur un forum anglais.

                Mais du coup j'ai remis ça à plus, (vue qu'il manquais encore un tuto dans mon jeu) et je suis partie sur la création d'une voiture en mode overboard ^^
                De toutes façons je pense virée la fumée du missile, car il à une vitesse de 450 m/s soit 1620 km/h, du coup elle est, si le jeu rame, affiché en plusieurs petite boule... ce qui est pas top ^^
                Ou bien mettre des vitesses moins rapide, je sais pas...
                Mais j'ai peur que ca devienne moins dynamique =/

                Enfin bref ^^

                Je referais un post quoi qu'il arrive si je trouve la solutions, merci pour tout en tous cas =)

                • Partager sur Facebook
                • Partager sur Twitter
                L'humanité n'a pas lieu d'être quant on éprouve une honte a faire pare de cette espèce...Open mind lead to open doors
                  13 octobre 2017 à 12:05:26

                  Finalement j'ai trouvé la solution, premièrement il suffit d'attacher un particule System à un enfant de l'objet en question (le missile dans mon cas),

                  ATTENTION : Pour ne pas avoir déformation le parent doit impérativement avoir une taille de (1,1,1)

                  Puis ajouter dans le script charger de la destruction :

                  La propriété :

                  public ParticleSystem Fumée;

                  Et ce code au moment de la destruction :

                  if(Fumée!=null)
                              {
                                  Fumée.transform.parent = null;
                                  Fumée.Stop();
                                  Destroy(Fumée.gameObject, Fumée.startLifetime);
                              }

                  Et voila !

                  Enjoy =)

                  • Partager sur Facebook
                  • Partager sur Twitter
                  L'humanité n'a pas lieu d'être quant on éprouve une honte a faire pare de cette espèce...Open mind lead to open doors
                    1 novembre 2017 à 5:09:02 - Message modéré pour le motif suivant : Message complètement hors sujet


                    Empêcher la destruction d'une particule - Unity

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown