Как определить, какая частица столкнулась с твердым телом в Unity? - PullRequest
0 голосов
/ 22 ноября 2018

Допустим, твердое тело проходит через кучу частиц, которые принадлежат одной системе частиц, и вы хотите, чтобы каждая частица, которая сталкивается с твердым телом, отскакивала.Как бы вы это сделали?

void OnParticleCollision (GameObject other) вызывается, когда твердое тело сталкивается с системой частиц.Однако мне нужно знать, какая частица в системе частиц столкнулась с телом.

Есть мысли?

1 Ответ

0 голосов
/ 22 ноября 2018

С помощью функции ParticleSystem.GetParticles вы можете перехватывать все ваши «живые» частицы, а затем назначать им индекс (вы должны наследовать от класса частиц, так как класс Particle не имеет индексов или переменных id).

GertParticles:

https://docs.unity3d.com/ScriptReference/ParticleSystem.GetParticles.html

Как получить доступ к отдельным частицам системы частиц?: https://answers.unity.com/questions/639816/how-do-you-access-the-individual-particles-of-a-pa.html

Как я уже сказал, частицы не имеют никакого идентификатора для их идентификации, я знаю, что это не кажется "оптимальным подходом", но посмотрите на этот пример из документации Unity о функции SetCustomParticleData (https://docs.unity3d.com/ScriptReference/ParticleSystem.SetCustomParticleData.html) они повторяют их все).

Также на той же странице вы можете увидеть один пример для присвоения уникального идентификатора каждой частице при ее рождении:

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;

public class ExampleClass : MonoBehaviour {

    private ParticleSystem ps;
    private List<Vector4> customData = new List<Vector4>();
    private int uniqueID;

    void Start() {

        ps = GetComponent<ParticleSystem>();
    }

    void Update() {

        ps.GetCustomParticleData(customData, ParticleSystemCustomData.Custom1);

        for (int i = 0; i < customData.Count; i++)
        {
            // set custom data to the next ID, if it is in the default 0 state
            if (customData[i].x == 0.0f)
            {
                customData[i] = new Vector4(++uniqueID, 0, 0, 0);
            }
        }

        ps.SetCustomParticleData(customData, ParticleSystemCustomData.Custom1);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...