public int GetParticles (Particle[] particles);

参数

particles输出粒子缓冲区,其中包含当前粒子状态。

返回

int 写入输入粒子数组的粒子数(当前存活的粒子数)。

描述

获取该粒子系统的粒子。

只要输入的“粒子”数组预分配一次,该方法不再进行任何分配(见下面的示例)。注意,可能只使用粒子数组的一小部分,具体取决于调用 GetParticles() 时粒子系统中当前存活的粒子数。

另请参阅:ParticleSetParticles

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]; } }