예제 #1
0
        public static AudioUnit GetFromPool()
        {
            if (audioParent == null)
            {
                audioParent = new GameObject(audioPoolParent);
            }

            AudioUnit audio = audioPool.Where(x => !x.gameObject.activeSelf).FirstOrDefault();

            if (audio == null)
            {
                audio = new GameObject(audioUnitPrefix, typeof(AudioSource), typeof(AudioUnit)).GetComponent <AudioUnit>();
                audioPool.Add(audio);
                audio.transform.SetParent(audioParent.transform, false);
            }

            audio.name = audioUnitPrefix;

            audio.OnPlay += delegate()
            {
                audio.gameObject.SetActive(true);
            };

            return(audio);
        }
예제 #2
0
 public static void ReturnToPool(AudioUnit audio)
 {
     audio.gameObject.SetActive(false);
     if (!audioPool.Contains(audio))
     {
         audioPool.Add(audio);
     }
 }
예제 #3
0
        public AudioUnit Play(string audioUnitPrefixName = null)
        {
            // Initialization
            AudioUnit audioSource = AudioPool.GetFromPool();

            // Setup Paramaters
            audioSource.playOnAwake           = false;
            audioSource.loop                  = loopType == AudioLoopType.Normal;
            audioSource.loopType              = loopType;
            audioSource.timeBetweenLoop       = timeBetweenLoop;
            audioSource.outputAudioMixerGroup = mixerGroup;

            audioSource.clip          = isUsingClips ? clips.Random() : clip;
            audioSource.clips         = isUsingClips ? clips : null;
            audioSource.pitch         = isPitchModified ? 1f - pitchMaxVariation.RandomValue : 1f;
            audioSource.isGoingToStop = autoDestroy != AudioStopType.No;

            if (audioSource.clip == null)
            {
                Debug.LogWarning($"An audio unit is created without a clip.");

                AudioPool.ReturnToPool(audioSource);
            }
            else
            {
                if (audioUnitPrefixName != null)
                {
                    audioSource.gameObject.name = audioUnitPrefixName;
                }

                audioSource.gameObject.name += audioSource.clip.name;

                // Auto Destroy
                switch (autoDestroy)
                {
                case AudioStopType.StopAfterDuration:
                    audioSource.duration = multiplier;
                    break;

                case AudioStopType.StopAfterPlays:
                    audioSource.duration = audioSource.clip.length * (multiplier - 1);
                    break;
                }

                // Play Sound
                audioSource.Play();
            }

            return(audioSource);
        }