public void CrossFadeTo(int target, float fadeInDurationOverride = -1, float fadeOutDurationOverride = -1) { StopAllCoroutines(); if (_target == target) { return; } _target = target; for (int i = 0; i < _soundEventInstances.Count; i++) { int iCopy = i; void SetVolume(float volume) { _soundEventInstances[iCopy].SetVolume(volume); } if (i == _target) { float duration = fadeInDurationOverride != -1 ? fadeInDurationOverride : fadeInTime; _soundEventInstances[i].Play(_soundEvent.audioClips[i]); StartCoroutine(Coroutines.AsynchronousLerpValue(SetVolume, _soundEventInstances[i].GetVolume(), _soundEvent.minVolume, duration)); } else { float duration = fadeOutDurationOverride != -1 ? fadeOutDurationOverride : fadeOutTime; _soundEventInstances[i].StopAfter(duration); StartCoroutine(Coroutines.AsynchronousLerpValue(SetVolume, _soundEventInstances[i].GetVolume(), 0, duration)); } } }