예제 #1
0
    public void EmitParticle()
    {
        Vector3          l        = GetLeftVector();
        Vector3          r        = GetRightVector();
        Vector3          startPos = new Vector3(Random.Range(l.x, r.x), Random.Range(l.y, r.y), Random.Range(l.z, r.z));
        GameObject       go       = Instantiate(particlePrefab, startPos, Quaternion.identity, transform) as GameObject; //TODO: Definitely pool
        ParticleWithInfo p        = new ParticleWithInfo();

        p.particle = go;
        p.speed    = Random.Range(minSpeed, maxSpeed);
        p.gravity  = gravity;
        p.lifetime = Random.Range(minLifetime, maxLifetime);
        p.rb       = go.GetComponent <Rigidbody>();
        if (p.rb == null)
        {
            p.rb      = go.AddComponent <Rigidbody>();
            p.rb.mass = gravity;
            p.rb.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
            p.rb.interpolation          = RigidbodyInterpolation.Interpolate;
        }

        //Add force
        p.rb.AddForce(transform.forward * p.speed, ForceMode.Impulse);

        activeParticles.Add(p);
        StartCoroutine(DestroyParticleAfterLifetime(p));
    }
예제 #2
0
    IEnumerator DestroyParticleAfterLifetime(ParticleWithInfo p)
    {
        yield return(new WaitForSeconds(p.lifetime));

        if (p != null)
        {
            Destroy(p.particle);
        }
    }