С помощью функции 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);
}
}