コード例 #1
0
    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);
    }
コード例 #2
0
        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;
                }
            }
        }