private void GenerateOrbitalLayer(int depth) { List <Orbital> orbits = new List <Orbital>(); orbitLayers[depth] = orbits; OrbitalRandomRanges param = parameters[depth]; int nbOrbits = UnityEngine.Random.Range(param.MinOrbitals, param.MaxOrbitals + 1); totalOrbitsGenerated += nbOrbits; while (totalOrbitsGenerated > maxOrbitals) { nbOrbits--; totalOrbitsGenerated--; } for (int i = 0; i < nbOrbits; i++) { Transform centerOfGravity; if (depth == 0) { centerOfGravity = transform; } else { List <Orbital> previousLayer = orbitLayers[depth - 1]; centerOfGravity = previousLayer[Random.Range(0, previousLayer.Count)].transform; } //Generate an Orbit of that Layer Orbital orbit = Instantiate(orbitPrefab, centerOfGravity).GetComponent <Orbital>(); orbit.InitializeOrbital( centerOfGravity, Random.Range(param.MinSpeed, param.MaxSpeed), Random.Range(param.MinRadius, param.MaxRadius), (Random.Range(0f, 1f) < param.ClockwiseProbability), Random.Range(param.MinSize, param.MaxSize)); orbit.SetColor(orbitColors[Random.Range(0, orbitColors.Count)]); bool hasTrail = (Random.Range(0f, 1f) < param.TrailsProbability); if (hasTrail) { TrailSpawner spawner = orbit.gameObject.AddComponent <TrailSpawner>(); spawner.InitializeTrail( trailPrefab, Random.Range(param.TParam.MinSpawnTime, param.TParam.MaxSpawnTime), Random.Range(param.TParam.MinFadingTime, param.TParam.MaxFadingTime), trailColors[Random.Range(0, trailColors.Count)], Random.Range(param.TParam.MinSize, param.TParam.MaxSize) ); } orbits.Add(orbit); } }