private bool TryGetItem(ParticleEffectName name, out ParticleSystem particle) { particle = null; if (_buffers.ContainsKey(name) == false || _prefabs.ContainsKey(name) == false) { return(false); } List <ParticleSystem> buffer = _buffers[name]; foreach (ParticleSystem item in buffer) { if (item.isPlaying == false) { particle = item; return(true); } } if (buffer.Count < _maxCapacity) { ParticleSystem newItem = Instantiate(_prefabs[name]); buffer.Add(newItem); particle = newItem; return(true); } return(false); }
public void PlayEffect(Vector3 position, ParticleEffectName name) { if (TryGetItem(name, out ParticleSystem particle)) { particle.transform.position = position; particle.Play(); } }