ParticleSystem.GetParticles
Declaration
public int GetParticles(out Particle[] particles);public int GetParticles(out Particle[] particles, int size);public int GetParticles(out Particle[] particles, int size, int offset);public int GetParticles(out NativeArray<Particle> particles);public int GetParticles(out NativeArray<Particle> particles, int size);public int GetParticles(out NativeArray<Particle> particles, int size, int offset);Параметры
| Параметр | Описание |
|---|---|
| частицы | Выходной буфер частиц, содержащий текущее состояние частиц. |
| размер | Число элементов, которые считываются из Particle System. |
| офсет | Смещение в активный список частиц, из которого копировать частицы. |
Возвращаемое значение
инт Число частиц, записанных на входной массив частиц (число частиц, живущих в данный момент).
Описание
Получает частицы этого Particle System.
Этот метод свободен от распределения, пока входной массив "частиц" предварительно распределен один раз (см. пример ниже). Метод получает только частицы, которые в данный момент живы в Particle System, когда он вызван, так что он может получить только небольшую часть массива частиц.
Дополнительные ресурсы: Particle, SetParticles.
using UnityEngine;
[RequireComponent(typeof(ParticleSystem))] public class ParticleFlow : MonoBehaviour { ParticleSystem m_System; ParticleSystem.Particle[] m_Particles; public float m_Drift = 0.01f;
private void LateUpdate() { InitializeIfNeeded();
// GetParticles is allocation free because we reuse the m_Particles buffer between updates int numParticlesAlive = m_System.GetParticles(m_Particles);
// Change only the particles that are alive for (int i = 0; i < numParticlesAlive; i++) { m_Particles[i].velocity += Vector3.up * m_Drift; }
// Apply the particle changes to the Particle System m_System.SetParticles(m_Particles, numParticlesAlive); }
void InitializeIfNeeded() { if (m_System == null) m_System = GetComponent<ParticleSystem>();
if (m_Particles == null || m_Particles.Length < m_System.main.maxParticles) m_Particles = new ParticleSystem.Particle[m_System.main.maxParticles]; } }