private void SpawnObstacles(bool firstChunk) { float spawnStartPoint; if (firstChunk) { spawnStartPoint = ChunkCenter.z + _chunkLength / 2; } else { spawnStartPoint = ChunkCenter.z - _chunkLength / 2 + _obstacleSpawnDistanceMin; } for (float f = spawnStartPoint; f < ChunkCenter.z + _chunkLength / 2;) { obstacleSpawnPoints.Clear(); int obstaclesToSpawn = Random.Range(_minObstaclesPerSpawnLocation, _maxObstaclesPerSpawnLocation); for (int i = 0; i <= obstaclesToSpawn; i++) { Obstacle obstacle = _obstaclePool.GetObstacle(); Vector3 newObstaclePosition = new Vector3(_obstacleXPosValues[Random.Range(0, _obstacleXPosValues.Length)], _obstacleYPosValues[Random.Range(0, _obstacleYPosValues.Length)], f); while (obstacleSpawnPoints.Contains(newObstaclePosition)) { newObstaclePosition = new Vector3(_obstacleXPosValues[Random.Range(0, _obstacleXPosValues.Length)], _obstacleYPosValues[Random.Range(0, _obstacleYPosValues.Length)], f); } obstacleSpawnPoints.Add(newObstaclePosition); obstacle.transform.position = newObstaclePosition; obstacle.gameObject.SetActive(true); _obstacles.Add(obstacle); } f += Random.Range(_obstacleSpawnDistanceMin, _obstacleSpawnDistanceMax); } }
// Create new obs private IEnumerator SpawnObstacles() { while (true) { yield return(new WaitForSeconds(spawnRate)); // Spawn a new obstacle var obstacle = obstaclePool.GetObstacle("Test"); obstacle.transform.position = transform.TransformPoint(riverBounds.center); // Put it at the back (+z) of the river bounding box obstacle.transform.Translate(0, 0, riverBounds.extents.z); } }