MusicManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class MusicManager : BaseManager<MusicManager>
{
//背景音乐
private AudioSource bkMusic = null;
private float bkValue = 1;
//音效
private GameObject soundObj = null;
private List<AudioSource> soundList = new List<AudioSource>();
private float soundValue = 1;
public MusicManager()
{
MonoManager.GetInstance().AddUpdateListener(Update);// 循环删除播放完的音效
}
/// <summary>
/// 循环删除播放完的音效
/// </summary>
private void Update()
{
for(int i = soundList.Count - 1; i >= 0; --i)
{
if (!soundList[i].isPlaying)
{
GameObject.Destroy(soundList[i]);
soundList.RemoveAt(i);
}
}
}
/// <summary>
/// 背景音乐 开始
/// </summary>
/// <param name="name"></param>
public void PlayBackMusic(string name)
{
if (bkMusic == null)
{
GameObject obj = new GameObject();
obj.name = "bkMusic";
bkMusic = obj.AddComponent<AudioSource>();
}
ResourcesManager.GetInstance().LoadAsync<AudioClip>("Music/BackMusic/" + name, (clip) => {
bkMusic.clip = clip;
bkMusic.loop = true;//循环
bkMusic.volume = bkValue;
bkMusic.Play();
});
}
/// <summary>
/// 背景音乐 调整
/// </summary>
/// <param name="name"></param>
public void ChangeBackMusic(float v)
{
bkValue = v;
if (bkMusic == null)
return;
bkMusic.volume = bkValue;
}
/// <summary>
/// 背景音乐 暂停
/// </summary>
/// <param name="name"></param>
public void PauseBackMusic(string name)
{
if (bkMusic == null)
return;
bkMusic.Pause();
}
/// <summary>
/// 背景音乐 停止
/// </summary>
/// <param name="name"></param>
public void StopBackMusic(string name)
{
if (bkMusic == null)
return;
bkMusic.Stop();
}
/// <summary>
/// 音效 开始
/// </summary>
/// <param name="name"></param>
/// <param name="isLoop"></param>
/// <param name="callBack"></param>
public void PlaySound(string name,bool isLoop,UnityAction<AudioSource> callBack = null)
{
if (soundObj == null)
{
GameObject obj = new GameObject();
obj.name = "soundObj";
}
//加载资源,加载、加Componen、循环、音量、播放、加列表
ResourcesManager.GetInstance().LoadAsync<AudioClip>("Music/Sound/" + name, (clip) => {
AudioSource source = soundObj.AddComponent<AudioSource>();
source.clip = clip;
source.loop = isLoop;
source.volume = soundValue;
source.Play();
soundList.Add(source);
if (callBack != null)
callBack(source);
});
}
/// <summary>
/// 音效 调整音量
/// </summary>
/// <param name="v"></param>
public void ChangeSound(float v)
{
soundValue = v;
for(int i=0; i<soundList.Count; ++i)
soundList[i].volume = soundValue;
}
/// <summary>
/// 音效 停止
/// </summary>
/// <param name="source"></param>
public void StopSound(AudioSource source)
{
if (soundList.Contains(source))
{
soundList.Remove(source);
source.Stop();
GameObject.Destroy(source);
}
}
}