/// <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; }
/// <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; }