Ejemplo n.º 1
0
    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
                                                       ));
    }
Ejemplo n.º 2
0
    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));
            }
        }
    }