public void InitScene() { currentPatternIndex = 0; currentPatternSpawnedAmount = 0; stairControllers.Clear(); float stairSize = StairPrefab.transform.localScale.z * StairPrefab.GetComponent <BoxCollider>().size.z - 0.1f; stairWidth = stairSize; float pathLenght = splineComputer.CalculateLength(); float P = 0; SplineResult stairResult = splineComputer.Evaluate(0); int i = 0; GameObject obj = Instantiate(StairPrefab); obj.transform.position = stairResult.position; obj.transform.rotation = stairResult.rotation; obj.transform.localEulerAngles = new Vector3(0, obj.transform.localEulerAngles.y, obj.transform.localEulerAngles.z); StairController stairController = obj.GetComponent <StairController>(); stairController.InitStair(i, GameManager.self.colorManager.GetStairColor(i)); stairControllers.Add(stairController); Vector3 currentPos = obj.transform.position; while (P < 1) { P += 0.001f; stairResult = splineComputer.Evaluate(P); float distance = Vector3.Distance(stairResult.position, currentPos); if (distance >= stairSize) { obj = Instantiate(StairPrefab); obj.transform.position = stairResult.position; obj.transform.rotation = stairResult.rotation; obj.transform.localEulerAngles = new Vector3(0, obj.transform.localEulerAngles.y, obj.transform.localEulerAngles.z); currentPos = obj.transform.position; stairController = obj.GetComponent <StairController>(); i += 1; stairController.InitStair(i, GameManager.self.colorManager.GetStairColor(i)); stairControllers.Add(stairController); } } int lastIndex = stairControllers.Count - 1; FinishContainer.position = stairControllers[lastIndex].transform.position; stairControllers[lastIndex].isLastStair = true; StairsAmount = stairControllers.Count; for (int j = 0; j < stairControllers.Count; j++) { stairControllers[j].SetParameters(StairPatterns(j)); stairControllers[j].DoMovement(); } }