예제 #1
0
    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);
            }
        }
    }
예제 #2
0
 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);
     }
 }