public void CrossFade(SFXHandle inClip, SFXHandle outClip, float fadeTime) { if (inClip == null || outClip == null) { return; } var coroutine = StartCoroutine(FadeCoroutine(inClip, outClip, fadeTime)); inClip.FadeCoroutine = coroutine; outClip.FadeCoroutine = coroutine; }
IEnumerator FadeCoroutine(SFXHandle inClip, SFXHandle outClip, float fadeTime) { float remainingTime = fadeTime; float inClipTarget = inClip.audioSource.volume; inClip.audioSource.volume = 0f; while (remainingTime >= 0f) { if (outClip != null) { outClip.audioSource.volume = Mathf.Lerp(outClip.audioSource.volume, 0f, Time.unscaledDeltaTime / remainingTime); } if (inClip != null) { inClip.audioSource.volume = Mathf.Lerp(inClip.audioSource.volume, inClipTarget, Time.unscaledDeltaTime / remainingTime); } remainingTime -= Time.unscaledDeltaTime; yield return(null); } if (outClip != null) { outClip.StopRightNow(); } }