diff --git a/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs index bdb1b00..742fe60 100644 --- a/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs +++ b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs @@ -29,7 +29,7 @@ namespace Stary.Evo.AudioCore audioSource1.volume = audioData.volume; currentAudioSource = audioSource1; currentAudioSource.Play(); - CoroutineHelper.StartCoroutine(FadeMusic(audioSource1, audioData.fadeDuration, audioSource2)); + FadeMusic(audioSource1, audioData.fadeDuration, audioSource2); } else { @@ -40,7 +40,7 @@ namespace Stary.Evo.AudioCore audioSource2.volume = audioData.volume; currentAudioSource = audioSource2; currentAudioSource.Play(); - CoroutineHelper.StartCoroutine(FadeMusic(audioSource2, audioData.fadeDuration, audioSource1)); + FadeMusic(audioSource2, audioData.fadeDuration, audioSource1); } else { @@ -56,8 +56,9 @@ namespace Stary.Evo.AudioCore /// {[fadeDuration:自然过渡时间]} public override void Stop(AudioData audioData) { - audioData = AudioDataInitialize(audioData); - CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, audioData.fadeDuration)); + //audioData = AudioDataInitialize(audioData); + //CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, audioData.fadeDuration)); + FadeAllMusic(); } /// @@ -67,13 +68,13 @@ namespace Stary.Evo.AudioCore /// 变化时间 /// 停止的音频 /// - private IEnumerator FadeMusic(AudioSource source1, float fadeDuration, AudioSource source2 = null) + private void FadeMusic(AudioSource source1, float fadeDuration, AudioSource source2 = null) { - yield return FadeInMusic(source1, fadeDuration); + CoroutineHelper.StartCoroutine(FadeInMusic(source1, fadeDuration)); if (source2 != null) { - yield return FadeOutMusic(source2, fadeDuration); + CoroutineHelper.StartCoroutine(FadeOutMusic(source2, fadeDuration)); } } @@ -86,6 +87,7 @@ namespace Stary.Evo.AudioCore /// private IEnumerator FadeOutMusic(AudioSource source, float fadeDuration) { + if (source == null) yield break; float startVolume = source.volume; while (source.volume > 0) @@ -95,16 +97,42 @@ namespace Stary.Evo.AudioCore } source.Stop(); + if (audioSource1 == source) + { + audioSource1 = null; + } + else if (audioSource2 == source) + { + audioSource2 = null; + } audioSourcePool.ReturnAudioSource("Music", source.gameObject); - if (currentAudioSource == audioSource1) + /*if (currentAudioSource == audioSource1) { audioSource2 = null; } else if (currentAudioSource == audioSource2) { audioSource1 = null; + }*/ + } + + private void FadeAllMusic() + { + if (currentAudioSource != null && currentAudioSource.isPlaying) + { + if (currentAudioSource == audioSource1) + { + audioSource1 = null; + } + else + { + audioSource2 = null; + } + audioSourcePool.ReturnAudioSource("Music", currentAudioSource.gameObject); + currentAudioSource = null; } + } /// diff --git a/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs index 5befd50..f816d4f 100644 --- a/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs +++ b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs @@ -22,6 +22,12 @@ namespace Stary.Evo.AudioCore public override void Play(AudioData audioData) { audioData = AudioDataInitialize(audioData); + if (audioData.clip == null) + { + Debug.LogError("播放的音效音频片段为空"); + return; + } + AudioSource source = audioSourcePool.GetAudioSource("SFX"); if (source == null) return; @@ -42,6 +48,7 @@ namespace Stary.Evo.AudioCore /// {[无可使用变量]} public override void Stop(AudioData audioData) { + if (activeSources == null) return; foreach (var source in activeSources) { if (source.isPlaying) diff --git a/Assets/04.AudioCore/package.json b/Assets/04.AudioCore/package.json index d54900c..5bb8036 100644 --- a/Assets/04.AudioCore/package.json +++ b/Assets/04.AudioCore/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.audiocore", - "version": "1.0.7", + "version": "1.0.8", "displayName": "04.AudioCore", "description": "音频播放工具", "unity": "2021.3",