[RESOLU] Modifier particules qui entrent en collision

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

[RESOLU] Modifier particules qui entrent en collision

Message par Leuprochon » 02 Mai 2020 15:21

Bonjour à tous !

Alors mon problème est simple :

J'aimerais pouvoir modifier les attributs des particules qui entrent en collision avec mon objet (les détruire, changer de couleur etc). Mais uniquement des particules qui sont entrées en collision avec mon objet, pas les autres.

J'ai écris ce code mais ça ne me l'applique pas QUE aux particules qui sont entrées en collision mais pour TOUTES les particules et je ne comprends pas pourquoi:

Code : Tout sélectionner


 void OnParticleCollision(GameObject other)
    {
 
        ParticleSystem.Particle[] particlelist = new ParticleSystem.Particle[Meteorite.particleCount];

        int test = Meteorite.GetParticles(particlelist);

       
        for (int i = 0; i < test; i++)
        {
            if (Atmosphere.color.a > 0.5f)
            {
                particlelist[i].color = Color.red;
            }
        }
        Meteorite.SetParticles(particlelist, test);
       

    }
    
Merci à tous !!
Dernière édition par Leuprochon le 04 Mai 2020 14:38, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: Modifier particules qui entrent en collision

Message par Max » 02 Mai 2020 16:05

Hello,

As-tu regardé le code fournis en guise d'exemple avec la doc de OnParticleCollision.
Il devrait t'éclairer sur la bonne marche à suivre je pense.
Image
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

Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

Re: Modifier particules qui entrent en collision

Message par Leuprochon » 02 Mai 2020 16:47

Merci pour le lien, je ne l'avais pas vu non.
Par contre ça n'a pas l'air de résoudre mon soucis (ou sinon je n'ai pas bien compris le script).

Si j'ai bien compris ça sert uniquement à faire bouger un objet quand des particules rentrent en contact avec celui-ci.

J'ai essayé de m'inspirer de différentes solution sur les forum, sur youtube et sur la doc, mais je ne vois pas ce qui cloche chez moi !:

https://www.youtube.com/watch?v=C3pf9XUsEtM&t=319s
https://docs.unity3d.com/ScriptReferenc ... 1572387218
https://answers.unity.com/questions/118 ... ision.html

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: Modifier particules qui entrent en collision

Message par Max » 02 Mai 2020 18:34

Les informations fournis dans OnParticleCollision() permettent d'avoir les informations liées aux collisions.
Je ne pense pas que tu puisses en tirer des informations sur chaque particules.
Par exemple, dans la vidéo du tuto dont tu donnes le lien, il s'en sert non pas pour changer les valeurs des particules qui entre en collision, mais pour changer le ParticleSystem à l'endroit de la collision par un autre.
Image
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

Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

Re: Modifier particules qui entrent en collision

Message par Leuprochon » 02 Mai 2020 21:29

Haa d'accord, donc si je me trompe pas il faut que je fasse comme dans cet exemple :

https://answers.unity.com/questions/118 ... ision.html

Je dois identifier les particules à part pour pouvoir les "taguer" et modifier seulement celles "taguées"?

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: Modifier particules qui entrent en collision

Message par Max » 03 Mai 2020 10:35

Leuprochon a écrit :
02 Mai 2020 21:29
Haa d'accord, donc si je me trompe pas il faut que je fasse comme dans cet exemple :

https://answers.unity.com/questions/118 ... ision.html

Je dois identifier les particules à part pour pouvoir les "taguer" et modifier seulement celles "taguées"?
Cela peut être en effet une bonne base de travail. Attention, c'est intéressant pour un système de quelques particules (d'ailleurs comme dans l'exemple), mais au delà cela peut vite s'avérer super lourd.
Image
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

Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

Re: Modifier particules qui entrent en collision

Message par Leuprochon » 03 Mai 2020 11:34

Ok super merci ! Comme il n'y aura pas plus de 5 6 particules affichées en même temps ça devrait aller je pense.

Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

Re: Modifier particules qui entrent en collision

Message par Leuprochon » 03 Mai 2020 16:36

Alors en continuant mes recherches j'ai trouvé une partie de la réponse. En effet, le onParticleCollision ne permet pas d'accéder aux attributs des particules une à une mais de TOUTES les particules.

Si je veux accéder aux attributs des particules qui entrent en collision je dois non pas utiliser les collisions mais le Trigger et la ça fonctionne bien.

Le seul hic c'est que le trigger ne permet pas de détecter avec quels objets les particules entrent en collision. De ce fait, si je veux qu'elles soit bleues quand elles entrent en collision avec une sphère, et vert avec un carré c'est impossible. Comme on ne peut pas différencier avec quels objets elles entrent en collision, elles font la même chose avec tout les objets qui ont été déclaré. Donc mes particules devront soit être bleues, ou vert, quand elles entrent en contact avec la sphère et le carré.

Je vais essayer de voir si on ne peut pas gérer tout ça en calculant la distance que séparer les particules de l'objet. J'espère que ça marchera car j'ai besoin de différencier mes collisions ... Ah oui, quand j'active "collision " dans mes particules pour pouvoir utiliser onParticleCollision et détecter mes collisions mes particules arrêtent de bouger à la moindre collision, donc impossible de faire ça /:.

Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

Re: Modifier particules qui entrent en collision

Message par Leuprochon » 04 Mai 2020 14:38

Tadam, j'ai trouvé !!

Je partage car j'ai vu pas mal de monde qui cherchait une solution sans trouvé la réponse.

Donc pour récapituler :

Comme tu m'avais dit, le OnParticleCollision ne permet pas de séparer les particules mais de donner accès qu'au système de particule (donc de modifier toutes les particules en même temps).
Pour avoir seulement accès aux particules qui entrent en collision avec l'objet il faut utiliser le OnParticleTrigger. Seul problème, impossible de différencier les différents objets avec lesquels les particules rentrent en collision dans cette fonction. Une des solutions que j'ai trouvé est de calculer la distance entre l'objet et les particules. C'est simple et léger !

Voici mon code :

Code : Tout sélectionner

  void OnParticleTrigger ()
     {
        Meteorite = GetComponent<ParticleSystem>();
        List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
        // get
        int numEnter = Meteorite.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);

        // iterate
        for (int i = 0; i < numEnter; i++)
        {
            ParticleSystem.Particle p = enter[i];
            
            float Dist = Vector3.Distance(Atmos.transform.position, p.position);

            if (Dist < Test1)
            {
                

                if (Dist < Test2 && Atmosphere.color.a < 0.5f)
                {
                    p.remainingLifetime = 0;
                    Score--;
                    scoreUI.text = Score.ToString();

                }

                else
                {
                    p.startColor = new Color32(255, 0, 0, 255);

                }
            }

            Debug.Log(Dist);
            enter[i] = p;
            

        }
 
En espérant que ça en aide certains !

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [RESOLU] Modifier particules qui entrent en collision

Message par Max » 04 Mai 2020 15:11

Hello,

merci pour le partage de ces recherches et du code, cela sera certainement utile pour d'autre ;)
Image
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

Répondre

Revenir vers « Scripting »