IEnumerator StartPlaying(AudioClip audioClip, float delay, KeyInPlaying keyInPlaying) { if (delay != 0) { yield return(new WaitForSeconds(delay)); } AudioSource audioSource = (poolOfAudioSource.Count > 0) ? poolOfAudioSource.Pop() : GetNewOne(); audioSource.clip = audioClip; audioSource.Play(); yield return(new WaitForSeconds(audioSource.clip.length)); poolOfAudioSource.Push(audioSource); keysInPlaying.RemoveAt(keysInPlaying.FindIndex(finding => finding.startTime == keyInPlaying.startTime && finding.key == keyInPlaying.key )); }
public void Play(string key, float delay = 0f) { AudioClip audioClip; if (audioClipDict.TryGetValue(key, out audioClip)) { float startTime = Time.time; if (!keysInPlaying.Exists(keyInPlaying => startTime == keyInPlaying.startTime && key == keyInPlaying.key )) { var keyInPlaying = new KeyInPlaying { key = key, startTime = startTime }; keysInPlaying.Add(keyInPlaying); StartCoroutine(StartPlaying(audioClip, delay, keyInPlaying)); } } }