private void PlayAndDie(AudioClip clip, AudioBus bus) { var playerInstance = new GameObject($"[{bus}]TemporaryAudioSource").AddComponent <AudioSource>(); bus.ApplyBus(playerInstance); playerInstance.PlayOneShot(clip); Destroy(playerInstance.gameObject, clip.length); }
public AudioSource PlayLooping(AudioClip clip, AudioBus bus = null) { bus = bus ?? masterBus; var source = PlayLoopingFromPool(clip, bus); loopingSourceList.Add(source); return(source); }
private AudioSource PlayLoopingFromPool(AudioClip clip, AudioBus bus = null) { var audioSource = audioPool[bus.Name].Dequeue(); audioSource.gameObject.SetActive(true); bus.ApplyBus(audioSource); audioSource.loop = true; audioSource.clip = clip; audioSource.Play(); return(audioSource); }
public void PlayOneShot(AudioClip clip, AudioBus bus = null) { bus = bus ?? masterBus; if (maxPoolSize == -1) { PlayAndDie(clip, bus); } else { StartCoroutine(PlayFromPool(clip, bus)); } }
private IEnumerator PlayFromPool(AudioClip clip, AudioBus bus = null) { if (audioPool[bus.Name].Count == 0) { PoolSources(); } var audioSource = audioPool[bus.Name].Dequeue(); audioSource.gameObject.SetActive(true); bus.ApplyBus(audioSource); audioSource.PlayOneShot(clip); yield return(new WaitForSeconds(clip.length)); audioPool[bus.Name].Enqueue(audioSource); audioSource.gameObject.SetActive(false); }
public AudioManager AddBus(AudioBus bus) { instance.audioPool.Add(bus.Name, new Queue <AudioSource>()); return(instance); }