【问题标题】:Is there a way to apply a function for a particle when it's first emitted from the ParticleSystem in Unity?当粒子首次从 Unity 中的粒子系统发射时,有没有办法为粒子应用函数?
【发布时间】:2018-08-31 18:20:30
【问题描述】:

当发射粒子时,我想计算粒子的旋转。现在,我正在更新整个粒子系统以向某个方向旋转,这意味着如果粒子系统旋转,已经发射的粒子将切换方向直到它们死亡。

这是我的更新粒子系统的旋转函数(在附加到粒子系统的脚本中)。

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中做到这一点

【问题讨论】:

  • 未经测试,但我相信您可以在粒子系统上使用GetParticles 来获取粒子数组。从那里您可以将外观应用到每个粒子。
  • 但是一旦你得到粒子,你如何在它第一次发射时应用一次?

标签: unity3d particle-system particles


【解决方案1】:
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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多