public void Initialise() { spawned = transform.GetComponentsInChildren <ObjectScroller>().ToList(); lastYSpawnPosition = Random.Range(lifeSpanCollider.bounds.min.y, lifeSpanCollider.bounds.max.y);; foreach (ObjectScroller scroller in spawned) { float speed = randomiseSpeed ? Random.Range(minSpeed, maxSpeed) : (maxSpeed + minSpeed) * 0.5f; scroller.SetScrollingObject(speed, lifeSpanCollider); lastSpawned = scroller; } float nextSpawnDistance = Random.Range(minDistanceApart, maxDistanceApart); spawnSub = this.UpdateAsObservable() .Where(_ => GameManager.instance.Difficulty != GameDifficulty.Stop) .Subscribe(_ => CheckCanSpawn(nextSpawnDistance)); }
private void SpawnObject() { float minY = lifeSpanCollider.bounds.min.y; float maxY = lifeSpanCollider.bounds.max.y; if (considerHeightApart) { minY = Mathf.Clamp(lastYSpawnPosition - maxHeightApart, lifeSpanCollider.bounds.min.y, lifeSpanCollider.bounds.max.y); maxY = Mathf.Clamp(lastYSpawnPosition + maxHeightApart, lifeSpanCollider.bounds.min.y, lifeSpanCollider.bounds.max.y); } lastYSpawnPosition = Random.Range(minY, maxY); ObjectScroller newObject = Instantiate(spawnPrefabs[Random.Range(0, spawnPrefabs.Count)], new Vector3(spawnXPosition, lastYSpawnPosition, 0), Quaternion.identity, transform).GetComponent <ObjectScroller>(); float speed = randomiseSpeed ? Random.Range(minSpeed, maxSpeed) : (maxSpeed + minSpeed) * 0.5f; newObject.SetScrollingObject(speed, lifeSpanCollider); newObject.StartScroll(); spawned.Add(newObject); lastSpawned = newObject; }