Объявление
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
public int GetParticles(out NativeArray
public int GetParticles(out NativeArray
Параметры
particles | Выходной буфер частиц, содержащий текущее состояние частиц. |
size | Количество элементов, которые считываются из системы частиц. |
offset | Смещение в активном списке частиц, откуда копировать частицы. |
Возвращает
int Количество частиц, записанных во входной массив частиц (количество частиц, живущих в настоящее время).
Описание
Получает частицы этой системы частиц.
Этот метод не требует выделения памяти, если входной массив "particles" предварительно выделяется один раз (см. пример ниже). Метод получает только те частицы, которые в данный момент находятся в системе частиц, когда он вызывается, поэтому он может получить только небольшую часть массива частиц.
Смотрите так же: 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 не требует выделения памяти, потому что мы повторно используем буфер m_Particles между обновлениями
int numParticlesAlive = m_System.GetParticles(m_Particles);
// Меняем только живые частицы
for (int i = 0; i < numParticlesAlive; i++)
{
m_Particles[i].velocity += Vector3.up * m_Drift;
}
// Применить изменения частиц к ParticleСистеме
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];
}
}