public void Prepare(Slider slider) { this.discCount = (int)slider.value; discHeight = 2f / discCount; for (int i = discCount - 1; i >= 0; i--) { Disc disc = Instantiate <Disc>(discPrefab); disc.transform.position = poles[0].transform.position + poles[0].discLocation + Vector3.up * (discCount - i - 1) * discHeight; float radius; if (discCount != 1) { radius = Mathf.Lerp(minDiscWidth, maxDiscWidth, i / (discCount - 1f)); } else { radius = Mathf.Lerp(minDiscWidth, maxDiscWidth, 0f); } disc.transform.localScale = new Vector3(radius, discHeight, radius); MeshRenderer discMeshRenderer = disc.GetComponentInChildren <MeshRenderer>(); Material discMaterial = new Material(discMeshRenderer.material); float colorTime; if (discCount != 1) { colorTime = (float)(discCount - i - 1) / (discCount - 1); } else { colorTime = 1; } discMaterial.color = discColors.Evaluate(colorTime); discMeshRenderer.material = discMaterial; poles[0].discs.Push(disc); discs.Add(disc); disc.index = i; disc.pole = poles[0]; } discs.Reverse(); }