前言:
继续来学习Unity中的程序基础框架
音效管理模块
顾名思义,作用:统一管理音乐音效相关
ProjectBase下创建一个目录Music,再在下面创建一个MusicMgr,它也是继承自单例模式模块
以前我们处理播放声音是怎么搞?每一个需要播放声音的地方分开弄代码,这样很麻烦,改起来也不好改。
Resource目录下面新建一个Music目录存放我们的音乐,Sounds存放音效,bk存放背景音乐
代码
public class MusicMgr : BaseManager<MusicMgr>
{
private AudioSource bkMusic = null;
private float bkVaule = 1;
private float soundVaule = 1;
private GameObject soundObj = null;
private List<AudioSource> soundList = new List<AudioSource>();
public MusicMgr() {
MonoMgr.GetInstance().AddUpdateListener(update);
}
private void update() {
for (int i = soundList.Count-1; i >= 0; i--) {
if (!soundList[i].isPlaying) {
GameObject.Destroy(soundList[i]);
soundList.RemoveAt(i);
}
}
}
//播放背景音乐
public void PlayBKMusic(string name) {
if (bkMusic == null) {
GameObject obj = new GameObject("BKMusic");
bkMusic = obj.AddComponent<AudioSource>();
}
//异步加载背景音乐并且加载完成后播放
ResMgr.GetInstance().LoadAsync<AudioClip>("Music/bk/"+name,(clip) => {
bkMusic.clip = clip;
bkMusic.loop = true;
//调整大小
bkMusic.volume = bkVaule;
bkMusic.Play();
});
}
//改变音量大小
public void ChangeBKValue(float v) {
bkVaule = v;
if (bkMusic == null) {
return;
}
bkMusic.volume = bkVaule;
}
//暂停背景音乐
public void PauseBKMusic() {
if (bkMusic == null)
{
return;
}
bkMusic.Pause();
}
//停止背景音乐
public void StopBKMusic() {
if (bkMusic == null) {
return;
}
bkMusic.Stop();
}
//播放音效
public void PlaySound(string name,bool isLoop,UnityAction<AudioSource> callback=null ) {
if (soundObj == null) {
soundObj = new GameObject();
soundObj.name = "Sounds";
}
AudioSource source=soundObj.AddComponent<AudioSource>();