Files
plugin-library/Assets/04.AudioCore/RunTime/MusicPlayer.cs

64 lines
1.6 KiB
C#
Raw Normal View History

2025-03-06 17:24:31 +08:00
using System.Collections;
using UnityEngine;
public class MusicPlayer
{
private AudioSourcePool audioSourcePool;
public MusicPlayer(AudioSourcePool audioSourcePool)
{
this.audioSourcePool = audioSourcePool;
}
public void Play(AudioClip clip, float fadeDuration)
{
AudioSource source = audioSourcePool.GetAudioSource("Music");
if (source == null) return;
CoroutineHelper.StartCoroutine(FadeMusic(source, clip, fadeDuration));
}
public void Stop(float fadeDuration)
{
AudioSource source = audioSourcePool.GetAudioSource("Music");
if (source == null) return;
CoroutineHelper.StartCoroutine(FadeOutMusic(source, fadeDuration));
}
private IEnumerator FadeMusic(AudioSource source, AudioClip clip, float fadeDuration)
{
yield return FadeOutMusic(source, fadeDuration);
source.clip = clip;
source.Play();
yield return FadeInMusic(source, fadeDuration);
}
private IEnumerator FadeOutMusic(AudioSource source, float fadeDuration)
{
float startVolume = source.volume;
while (source.volume > 0)
{
source.volume -= startVolume * Time.deltaTime / fadeDuration;
yield return null;
}
source.Stop();
source.volume = startVolume;
}
private IEnumerator FadeInMusic(AudioSource source, float fadeDuration)
{
float targetVolume = source.volume;
source.volume = 0;
while (source.volume < targetVolume)
{
source.volume += targetVolume * Time.deltaTime / fadeDuration;
yield return null;
}
}
}