public void Emit() { for (int i = 0; i < prefabsPerEmit; i++) { if (prefabPool.Count > prefabsPerEmit) { GameObject poppedPrefab = prefabPool.Pop(); poppedPrefab.transform.position = spawnPoint.position; EmittedParticle particle = poppedPrefab.GetComponent <EmittedParticle>(); Rigidbody beanBody = poppedPrefab.GetComponent <Rigidbody>(); float x = Random.Range(-spawnForceMax.x, spawnForceMax.x); float y = Random.Range(spawnForceMax.y / 20, spawnForceMax.y); float z = Random.Range(-spawnForceMax.z, spawnForceMax.z); Vector3 spawnForce = new Vector3(x, y, z); poppedPrefab.SetActive(true); beanBody.AddRelativeForce(spawnForce, ForceMode.Impulse); beanBody.AddTorque(spawnForce); StartCoroutine(particle.Disappear()); } else { //expand by 10% if there isn't enough objects AddToPool(startingPoolSize / 10); } } }
void AddToPool(int number) { for (int i = 0; i < number; i++) { GameObject bean = GameObject.Instantiate <GameObject>(prefab); EmittedParticle beanParticle = bean.GetComponent <EmittedParticle>(); beanParticle.SetEmitter(this); bean.SetActive(false); prefabPool.Push(bean); } }