void Spawn() { while (objects.Count >= count) { // Destroy(objects.Dequeue()); } if (prefabs.Count == 0) { return; } var e = Instantiate(prefabs[Random.Range(0, prefabs.Count)]); Vector3 pos = Random.insideUnitCircle * radius; pos.z = pos.y; pos.y = Random.Range(height, height * 4f); e.transform.parent = transform; e.transform.position = pos; e.transform.rotation = Random.rotation; e.transform.localScale = Vector3.one * Random.Range(minSize, maxSize); var rb = e.GetComponent <Rigidbody>(); if (rb != null) { rigidbodies.Add(rb); } GDOC.ProcessNewObject(e); }
IEnumerator RespawnC() { if (prefab == null) { yield break; } if (controlGDOC) { GDOC.Disable(); } yield return(null); Clear(); yield return(null); Random.InitState(seed); GameObject processedPrefab = null; for (var i = -n; i < currentN; i++) { for (var j = -n; j < currentN; j++) { if (skipCenter && i == 0 && j == 0) { continue; } var scale = Random.Range(minScale, maxScale); var position = transform.position + new Vector3(i * step, Random.Range(minHeight, maxHeight) * scale, j * step); var sample = processedPrefab == null ? prefab : processedPrefab; var e = Instantiate(sample, position, Quaternion.identity).transform; if (processedPrefab == null) { GDOC.ProcessNewObject(e.gameObject); processedPrefab = e.gameObject; } e.transform.SetParent(transform, true); e.localScale = Vector3.one * scale; if (randomAARotation) { e.localEulerAngles = Vector3.up * 90 * Random.Range(0, 4); } if (randomOffset) { e.localPosition += e.forward * Random.Range(0, step * 0.5f); } if (disableOnSpawn) { e.gameObject.SetActive(false); } } var state = Random.state; Random.state = state; } if (controlGDOC) { GDOC.Enable(); } }