Есть ли способ применить функцию для частицы, когда она впервые испускается из ParticleSystem в Unity? - PullRequest
0 голосов
/ 31 августа 2018

Когда испускается частица, я хотел вычислить вращение частицы. Прямо сейчас я обновляю всю систему частиц, чтобы она вращалась в определенном направлении, что означает, что уже испущенные частицы будут менять направления, пока не умрут, если система частиц будет вращаться.

Это моя функция поворота (в скрипте, прикрепленном к системе частиц), которая обновляет систему частиц.

void lookAtTarget()
    {
        Vector3 lookPos = fingerAim.transform.position - transform.position;
        Quaternion lookRotation = Quaternion.LookRotation(lookPos);
        transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, Time.deltaTime * 10.5f);
    }

Функция обновления:

void Update {
   transform.position = player.transform.position;
   lookAtTarget();
}

В принципе, я хочу применить lookAtTarget один раз, когда частица впервые испускается. Есть ли как это сделать в Unity

?

1 Ответ

0 голосов
/ 31 августа 2018
ParticleSystem m_System;
ParticleSystem.Particle[] m_Particles;
int prevNumParticles = 0;

private void LateUpdate()
{
    InitializeIfNeeded();

    int numParticlesAlive = m_System.GetParticles(m_Particles);

    if (numParticlesAlive != prevNumParticles)
        ParticleControl(m_Particles[0]); //reference the newest particle (might be last in array)

    prevNumParticles = numParticlesAlive;
}

private void ParticleControl(particle)
{
     // do look at for the particle here
}

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