/// <summary>
    /// 全チャネルをフェードアウトさせるコルーチン(大きくする)
    /// </summary>
    /// <param name="frame">フェードさせるフレーム</param>
    /// <param name="volume">フェード先のボリューム(0.0~1.0)</param>
    /// <param name="func">フェードアウト終了後に行う関数</param>
    /// <returns></returns>
    public IEnumerator SoundFadeOutAllCoroutine(float frame, float volume = 1.0f, FadeOutFinishedFunc func = null)
    {
        //状態更新
        state = FadeState.FadeOut;

        //1フレーム当たりの増減させる量
        float value = volume / frame;

        //フェードフレーム分繰り返す
        for (int f = 0; f < frame; ++f)
        {
            //毎フレームチャネル数分繰り返す
            for (int c = 0; c < channel.Length; ++c)
            {
                GetChannel(c).volume += value;
            }
            yield return(null);
        }

        //補正
        for (int c = 0; c < channel.Length; ++c)
        {
            GetChannel(c).volume = volume;
        }

        //コールバック
        if (func != null)
        {
            func();
        }

        //状態更新
        state = FadeState.None;
        yield break;
    }
Exemple #2
0
    /// <summary>
    /// フェードアウトするコルーチン
    /// </summary>
    /// <param name="frame">フェードさせるフレーム</param>
    /// <param name="fadeInFinished">フェードアウト終了後に行う関数</param>
    /// <returns></returns>
    public IEnumerator FadeOutCoroutine(float frame, FadeOutFinishedFunc fadeOutFinished = null)
    {
        state = FadeState.FadeOut;
        float speed = 1 / frame;

        for (int i = 0; i < frame; i++)
        {
            Alpha -= speed;
            yield return(null);
        }

        if (fadeOutFinished != null)
        {
            fadeOutFinished();
        }
        state = FadeState.None;
        yield break;
    }
    /// <summary>
    /// 全チャネルのフェードアウト開始命令
    /// </summary>
    /// <param name="frame">フェードさせるフレーム</param>
    /// <param name="volume">フェード先のボリューム</param>
    /// <param name="func">フェードアウト終了後に行う関数</param>
    public void StartSoundFadeOutAll(float frame, float volume = 1.0f, FadeOutFinishedFunc func = null)
    {
        var coroutine = SoundFadeOutAllCoroutine(frame, volume, func);

        StartCoroutine(coroutine);
    }
    /// <summary>
    /// フェードアウト(大きくなる)の開始命令
    /// </summary>
    /// <param name="frame">フェードさせるフレーム</param>
    /// <param name="volume">フェード先のボリューム(0.0~1.0)</param>
    /// <param name="channelIndex">フェードさせるチャネルの番号</param>
    /// <param name="func">フェードアウト終了後に行う関数</param>
    public void StartSoundFadeOut(float frame, float volume = 1.0f, int channelIndex = 0, FadeOutFinishedFunc func = null)
    {
        var coroutine = FadeOutCoroutine(frame, volume, channelIndex, func);

        StartCoroutine(coroutine);
    }
    /// <summary>
    /// フェードアウトするコルーチン(大きくなる方)
    /// </summary>
    /// <param name="frame">フェードさせるフレーム</param>
    /// <param name="volume">フェード先のボリューム(0.0~1.0)</param>
    /// <param name="fadeInFinished">フェードアウト終了後に行う関数</param>
    /// <returns></returns>
    public IEnumerator FadeOutCoroutine(float frame, float volume = 1.0f, int channelIndex = 0, FadeOutFinishedFunc func = null)
    {
        //フェード状態更新
        state = FadeState.FadeOut;

        //1フレーム当たりの増減させる量
        float value = volume / frame;

        for (int i = 0; i < frame; i++)
        {
            GetChannel(channelIndex).volume += value;
            yield return(null);
        }

        //補正
        GetChannel(channelIndex).volume = volume;

        //コールバック
        if (func != null)
        {
            func();
        }

        //フェード状態更新
        state = FadeState.None;
        yield break;
    }