// Use this for initialization void Build() { if (subCount < 0) { subCount = 0; } if (baseCount < 0) { baseCount = 0; } _randomSeed = randomSeed; _subCount = subCount; _baseCount = baseCount; int i, j; Vector3 pos, pos2; float size, size2; List <int> existingParticles = new List <int>(); for (i = 0; i < particlesList.Count; i++) { existingParticles.Add(particlesList[i]); } particlesList.Clear(); particlesPositions.Clear(); particlesSizes.Clear(); _position += Vector3.one; int index = 0; for (i = 0; i < baseCount; i++) { //Random.seed = randomSeed + i; pos = Random.insideUnitSphere * emitter.startSize * 0.2f; size = Random.Range(emitter.startSize, emitter.endSize); if (existingParticles.Count > 0) { index = existingParticles[0]; existingParticles.RemoveAt(0); emitter.particles[index].position = pos; emitter.particles[index].size = size; emitter.particles[index].startSize = size; emitter.particles[index].endSize = size; emitter.particles[index].startLifetime = -1; emitter.particles[index].lifetime = 0; emitter.particles[index].speed = 0; emitter.particles[index].startColor = emitter.startColor; emitter.particles[index].endColor = emitter.endColor; } else { index = emitter.SpawnParticle(pos, Vector3.zero, 0, -1, size, size, emitter.startColor, emitter.endColor, 0); } if (index >= 0) { particlesList.Add(index); particlesPositions.Add(pos); particlesSizes.Add(size); for (j = 0; j < subCount; j++) { //Random.seed = randomSeed + 100 + j*5; pos2 = pos + Random.onUnitSphere * size * 0.2f; size2 = Random.Range(emitter.startSize * 0.5f, emitter.endSize * 0.3f); if (existingParticles.Count > 0) { index = existingParticles[0]; existingParticles.RemoveAt(0); emitter.particles[index].position = pos2; emitter.particles[index].size = size2; emitter.particles[index].startSize = size2; emitter.particles[index].endSize = size2; emitter.particles[index].startLifetime = -1; emitter.particles[index].lifetime = 0; emitter.particles[index].speed = 0; emitter.particles[index].startColor = emitter.startColor; emitter.particles[index].endColor = emitter.endColor; } else { index = emitter.SpawnParticle(pos2, Vector3.zero, 0, -1, size2, size2, emitter.startColor, emitter.endColor, 0); } if (index >= 0) { particlesList.Add(index); particlesPositions.Add(pos2); particlesSizes.Add(size2); } } } } for (i = 0; i < existingParticles.Count; i++) { emitter.KillParticle(existingParticles[i]); } built = true; }