SoundManagerClip FindFreeAudioSource(SoundLayer layer, string clipName) { AudioSource tempAudio = null; foreach (SoundManagerClip clip in _layers[layer]) { if (clip._audioClipPath == clipName) { tempAudio = clip._audiSource; } if (!clip._audiSource.isPlaying && !clip._isPaused) { return(clip); } } SoundManagerClip smc = new SoundManagerClip(); if (tempAudio == null) { smc._audiSource = gameObject.AddComponent <AudioSource> (); } else { smc._audiSource = tempAudio; } smc._audiSource.outputAudioMixerGroup = SetAudioGroup(layer); smc._audiSource.playOnAwake = false; smc._audioClipPath = ""; _layers[layer].Add(smc); return(smc); }
public SoundManagerClip PlaySound(string clipName, SoundLayer layer, bool isLooping = false) { SoundManagerClip smc = FindFreeAudioSource(layer, clipName); smc._audioClipPath = clipName; smc.LoadSoundClip(); smc._audiSource.loop = isLooping; smc._audiSource.Play(); return(smc); }
public SoundManagerClip PlayTimedSound(string clipName, SoundLayer layer, float timeToPlay) { SoundManagerClip cc = null; if (_continuosLooping.ContainsKey(clipName)) { cc = _continuosLooping[clipName]; cc._playUntil = Time.time + timeToPlay; } else { cc = FindFreeAudioSource(layer, clipName); cc._audioClipPath = clipName; cc._playUntil = Time.time + timeToPlay; cc._audiSource.loop = true; cc.LoadSoundClip(); cc._audiSource.Play(); _continuosLooping.Add(cc._audioClipPath, cc); } return(cc); }