void StartFadingOutLongSound(string name) { LongSoundFadingOut fader = new LongSoundFadingOut(); LongSound sound = _longSounds[name]; fader.Source = sound.Source; fader.FadingTime = sound.FadingTime; fader.Timer = 0; fader.StartVolume = sound.Source.volume; _longSoundFadingsOut.Add(fader); }
void StartFadingOutMusic() { if (_currentMusic != null) { LongSoundFadingOut fader = new LongSoundFadingOut(); fader.Source = _currentMusic.Source; fader.FadingTime = GameData.Instance.GameSoundSettings.MusicFadeTime; fader.Timer = 0; fader.StartVolume = _currentMusic.Source.volume; _longSoundFadingsOut.Add(fader); } }
void Update() { // Destory only one sound per frame Sound soundToDelete = null; foreach (Sound sound in _sounds) { if (IsSoundFinished(sound)) { soundToDelete = sound; break; } } if (soundToDelete != null) { _sounds.Remove(soundToDelete); Destroy(soundToDelete.Source); } if (GameData.Instance.GameSoundSettings.AutoPause) { bool curPause = Time.timeScale < 0.1f; if (curPause != AudioListener.pause) { AudioListener.pause = curPause; } } for (int i = 0; i < _longSoundFadingsOut.Count; i++) { LongSoundFadingOut longSound = _longSoundFadingsOut[i]; if (longSound.Source == null) { _longSoundFadingsOut.RemoveAt(i); i--; } else { longSound.Timer += Time.unscaledDeltaTime; _longSoundFadingsOut[i] = longSound; if (longSound.Timer >= longSound.FadingTime) { Destroy(longSound.Source); _longSoundFadingsOut.RemoveAt(i); i--; } else { float k = Mathf.Clamp01(longSound.Timer / longSound.FadingTime); longSound.Source.volume = Mathf.Lerp(longSound.StartVolume, 0, k); } } } if (_currentMusic != null && _currentMusic.FadingIn) { _currentMusic.Timer += Time.unscaledDeltaTime; if (_currentMusic.Timer >= _currentMusic.FadingTime) { _currentMusic.Source.volume = _currentMusic.TargetVolume; _currentMusic.FadingIn = false; } else { float k = Mathf.Clamp01(_currentMusic.Timer / _currentMusic.FadingTime); _currentMusic.Source.volume = Mathf.Lerp(0, _currentMusic.TargetVolume, k); } } foreach (var longSound in _longSounds) { if (longSound.Value.FadingIn) { longSound.Value.Timer += Time.deltaTime; if (longSound.Value.Timer >= longSound.Value.FadingTime) { longSound.Value.Source.volume = longSound.Value.TargetVolume; longSound.Value.FadingIn = false; } else { float k = Mathf.Clamp01(longSound.Value.Timer / longSound.Value.FadingTime); longSound.Value.Source.volume = Mathf.Lerp(0, longSound.Value.TargetVolume, k); } } } }