public void LoadTrack(int _currentIndex, int _endIndex) { currentTrackIndex = _endIndex; TrackSegment lastTrackSegment = null; if (presentedTrackSegment.Count > 0) { lastTrackSegment = presentedTrackSegment[presentedTrackSegment.Count - 1]; } for (int i = _currentIndex; i < _endIndex; i++) { int index = i; if (levelConfig.randomTrack) { index = Random.Range(0, levelConfig.tracks.Count); } if (index >= levelConfig.tracks.Count) { Debug.LogError("Track not available!"); index = levelConfig.tracks.Count - 1; } string trackName = levelConfig.tracks[index]; ObjectPool trackPool = trackPoolList.Find(item => trackName.Equals(item.name)); GameObject trackGameObject = trackPool.Get(); TrackSegment segment = trackGameObject.GetComponent <TrackSegment>(); segment.SetSegment(trackPool, i); Vector3 lastTrackExitPosition = new Vector3(0.0f, 0.0f, -1 * ((segment.endPoint.position.z + segment.startPoint.position.z) / 2.0f)); if (lastTrackSegment != null) { lastTrackExitPosition = lastTrackSegment.endPoint.position; } trackGameObject.transform.position = new Vector3(trackGameObject.transform.position.x, trackGameObject.transform.position.y, lastTrackExitPosition.z + ((segment.endPoint.position.z + segment.startPoint.position.z) / 2.0f)); presentedTrackSegment.Add(segment); lastTrackSegment = segment; } isTrackReady = true; }