2025-08-14 17:31:39 -05:00

57 lines
1.5 KiB
C#

using System.Collections;
using UnityEngine;
namespace Managers
{
public class BGM : MonoBehaviour
{
[SerializeField] AudioSource bgmPlayer;
private AudioClip _currentMusic;
public void SetCurrentMusic(AudioClip music, float fadeTime = 0)
{
if (fadeTime > 0)
{
StartCoroutine(FadeSong(fadeTime, music));
}
else
{
bgmPlayer.Stop();
bgmPlayer.clip = music;
bgmPlayer.Play();
}
}
private IEnumerator FadeSong(float fadeTime, AudioClip music)
{
var timePassed = 0f;
var startVolume = bgmPlayer.volume;
if (bgmPlayer.clip)
{
while (timePassed < fadeTime / 2f)
{
timePassed += Time.deltaTime;
bgmPlayer.volume = Mathf.Lerp(startVolume, 0f, timePassed / (fadeTime / 2f));
yield return null;
}
}
bgmPlayer.volume = 0f;
if (!music) yield break;
bgmPlayer.clip = music;
bgmPlayer.Play();
timePassed = 0f;
while (timePassed < fadeTime / 2)
{
timePassed += Time.deltaTime;
bgmPlayer.volume = Mathf.Lerp(0f, startVolume, timePassed / (fadeTime / 2f));
yield return null;
}
bgmPlayer.volume = startVolume;
}
}
}