IEnumerator Internal_LoadAsyncScene(int scene, int previousScene) { if (usesFade) { //fade FindObjectOfType <PanelFade>().FadeIn(fadeDuration); } float audioFadeDuration = usesFade ? fadeDuration : .1f; FindObjectOfType <AudioManager>().FadeOutBGM(fadeDuration); if (usesFade) { yield return(new WaitForSeconds(audioFadeDuration)); } OnFadeInCompleted?.Invoke(); var player = FindObjectOfType <Player>(); yield return(new WaitForEndOfFrame()); AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(scene, LoadSceneMode.Additive); while (!asyncLoad.isDone) { yield return(null); } FindObjectOfType <PanelFade>().FadeOut(fadeDuration); Debug.Log("Unloading scene " + previousScene); SceneManager.UnloadSceneAsync(previousScene); }
private void FadeIn(float[] buffer, int offset, int sourceSamplesRead) { int sample = 0; while (sample < sourceSamplesRead) { for (int ch = 0; ch < source.WaveFormat.Channels; ch++) { buffer[offset + sample++] *= fadePosition; } fadePosition += fadeStep; if (fadePosition >= 1) { fadePosition = 1; fadeState = FadeState.FullVolume; // no need to multiply any more eventInvokeQueue.Enqueue(() => OnFadeInCompleted?.Invoke(this, EventArgs.Empty)); break; } } }