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)); }
IEnumerator DestroyParticleAfterLifetime(ParticleWithInfo p) { yield return(new WaitForSeconds(p.lifetime)); if (p != null) { Destroy(p.particle); } }