コード例 #1
0
        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);
        }
コード例 #2
0
        public AudioSource PlayLooping(AudioClip clip, AudioBus bus = null)
        {
            bus = bus ?? masterBus;
            var source = PlayLoopingFromPool(clip, bus);

            loopingSourceList.Add(source);
            return(source);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 public void PlayOneShot(AudioClip clip, AudioBus bus = null)
 {
     bus = bus ?? masterBus;
     if (maxPoolSize == -1)
     {
         PlayAndDie(clip, bus);
     }
     else
     {
         StartCoroutine(PlayFromPool(clip, bus));
     }
 }
コード例 #5
0
        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);
        }
コード例 #6
0
 public AudioManager AddBus(AudioBus bus)
 {
     instance.audioPool.Add(bus.Name, new Queue <AudioSource>());
     return(instance);
 }