public void EmitParticle(FakeParticle target) { liveParticles = Mathf.Min(maxParticles, liveParticles + 1); target.live = true; target.renderer.enabled = true; Vector3 offset = Vector3.Scale(Random.insideUnitSphere, area); if (offset.magnitude < minEmitterRange) { offset = offset.normalized * minEmitterRange; } target.transform.position = transform.position + offset; target.transform.localScale = Vector3.one * minSize; target.energy = Random.Range(minEnergy, maxEnergy); target.velocity = worldVelocity + Vector3.Scale(RandomF.insideUnitCube, randomVelocity); target.localVelocity = localVelocity + Vector3.Scale(RandomF.insideUnitCube, randomLocalVelocity); target.force = force + Vector3.Scale(RandomF.insideUnitCube, randomForce); target.angularVelocity = angularVelocity + (-.5f + Random.value) * randomAngularVelocity; if (randomRotation) { target.rotation = Random.value * 360; } }
FakeParticle MakeParticle() { GameObject obj = new GameObject("Particle"); FakeParticle particle = obj.AddComponent <FakeParticle>() as FakeParticle; particle.system = this; particle.live = false; particle.transform.parent = transform; particle.billboard = obj.AddComponent <Billboard>(); //deadParticles.Enqueue(particle); obj.AddComponent <MeshFilter>().mesh = mesh; obj.AddComponent <MeshRenderer>().material = material; obj.renderer.enabled = false; return(particle); }