protected void SpawnNewSegment() { if (trackSegments.Length == 0) { return; } //Init random seed if (m_TrackSeed != -1) { Random.InitState(m_TrackSeed); } else { Random.InitState((int)System.DateTime.Now.Ticks); } //Spawn segment TrackSegment segmentToUse; bool spawnObstacles = true; //Use safe segment if (m_CurrentSafeSegmentCount < m_MaxSafeSegmentCount) { segmentToUse = trackSegments[0]; m_CurrentSafeSegmentCount++; spawnObstacles = false; } else { //Random track to spawn int randomIndex = Random.Range(0, trackSegments.Length); segmentToUse = trackSegments[randomIndex]; } //Calculate spawn position Vector3 spawnPosition; if (m_CurrentSegment == null) { spawnPosition = transform.position; } else { spawnPosition = m_CurrentSegment.endPoint.position + (segmentToUse.transform.position - segmentToUse.startPoint.position); } //Spawn segment from object pool DefaultObjectPool poolToUse = DefaultObjectPool.GetObjectPool(segmentToUse.gameObject, 1); DefaultPoolObject poolObject = poolToUse.Pop(spawnPosition); m_CurrentSegment = poolObject.transform.GetComponent <TrackSegment>(); m_CurrentSegment.poolObject = poolObject; //Spawn obstacles if (spawnObstacles) { m_CurrentSegment.SpawnObstacles(); } //Add to list m_CurrentSegments.Add(m_CurrentSegment); }