//再生(直前があればフェードアウトしてから再生) void PlayFade(SoundData data, float fadeInTime, float fadeOutTime, bool corssFade) { //フェードアウト中のがあったら消す if (FadeOutAudio != null) { GameObject.Destroy(FadeOutAudio.gameObject); } //現在のオーディオがないなら即座に鳴らす if (Audio == null) { Audio = CreateNewAudio(data); //即時再生 Audio.Play(fadeInTime); } else { //今鳴っているものをフェードアウト FadeOutAudio = Audio; Audio = CreateNewAudio(data); FadeOutAudio.FadeOut(fadeOutTime); if (corssFade) { //即座に鳴らす Audio.Play(fadeInTime); } else { //フェードアウトを待ってから鳴らす if (Audio != null) { Audio.Play(fadeInTime, fadeOutTime); } } } }
public void StartPlayingTrack(AudioSource source) { PlayTrack playTrack = new PlayTrack(source); FadeInAudio fadeIn = new FadeInAudio(source, fadeInTime, musicVolume); playTrack.Then(fadeIn); if (currentActiveSources.Count > 0) { FadeOutAudio fadeOut = null; for (int i = currentActiveSources.Count - 1; i >= 0; i--) { fadeOut = new FadeOutAudio(currentActiveSources[i], fadeOutTime); Services.TaskManager.AddTask(fadeOut); currentActiveSources.Remove(currentActiveSources[i]); } fadeOut.Then(playTrack); } else { Services.TaskManager.AddTask(playTrack); } currentActiveSources.Add(source); }