コード例 #1
0
 public void ReturnToInactivePool(PooledParticleEffect effect)
 {
     if (effect.gameObject.activeSelf)
     {
         effect.gameObject.SetActive(false);
         activeEffects.Remove(effect);
         inactiveEffects.Add(effect);
     }
 }
コード例 #2
0
    public PooledParticleEffect NewEffect(Vector3 position, Vector3 direction, Transform parent, int layer)
    {
        PooledParticleEffect effect = NewEffect();

        effect.gameObject.transform.parent = parent;
        effect.transform.position          = position;
        effect.transform.localRotation     = Quaternion.LookRotation(direction);
        effect.SetLayerIncludingAllChildren(effect.gameObject, layer);
        effect.ScaleIncludingAllChildren(effect.gameObject, Vector3.one);
        return(effect);
    }
コード例 #3
0
    bool TryTakeEffectFromInactivePool(out PooledParticleEffect effect)
    {
        int count = inactiveEffects.Count;

        if (count > 0)
        {
            int index = count - 1;
            effect = inactiveEffects[index];
            inactiveEffects.RemoveAt(index);
            return(true);
        }
        else
        {
            effect = null;
            return(false);
        }
    }
コード例 #4
0
    IEnumerator ChargeAndShoot(float chargeTime)
    {
        PooledParticleEffect[] chargeEffects = new PooledParticleEffect[bulletOrigins.Length];
        for (int i = 0; i < bulletOrigins.Length; i++)
        {
            chargeEffects[i] = chargeEffectPool.NewEffect();
            chargeEffects[i].gameObject.layer        = LayerMask.NameToLayer("Default");
            chargeEffects[i].transform.parent        = bulletOrigins[i].transform;
            chargeEffects[i].transform.localPosition = Vector3.zero;
            chargeEffects[i].transform.localRotation = Quaternion.identity;
        }
        yield return(new WaitForSeconds(chargeTime));

        for (int i = 0; i < chargeEffects.Length; i++)
        {
            chargeEffects[i].Deactivate(true);
        }
        ActuallyShoot();
    }