👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:Unity基础实战
public class MusicManager : SingleManager<MusicManager>
{
private AudioSource bgMusic = null; //背景音乐一般是一个
private float bgValue = 1; //音乐大小
private GameObject soundObj = null; //音效依附的父对象
private List<AudioSource> soundList = new List<AudioSource>(); //音效列表
private float soundValue = 1; //音效大小
public MusicManager()
{
UpdateManager .GetInstance().AddUpdateListener(MyUpdate); //添加到帧更新的·生命周期函数中
}
private void MyUpdate()
{
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(bgMusic == null)
{
GameObject obj = new GameObject("BgMusic"); //直接命名
bgMusic = obj.AddComponent<AudioSource>();
}
//异步加载背景音乐
ResourceManager.GetInstance().LoadAsync<AudioClip>("音乐路径" + name, (clip) =>
{
bgMusic.clip = clip;
bgMusic.loop = true;
bgMusic.volume = bgValue;
bgMusic.Play();
});
}
// 暂停背景音乐
public void PauseBgMusic()
{
if (bgMusic == null)
return;
bgMusic.Pause();
}
// 停止背景音乐
public void StopBgMusic()
{
if (bgMusic == null)
return;
bgMusic.Stop();
}
// 改变背景音乐 音量大小
public void ChangeBKValue(float v)
{
bgValue = v;
if (bgMusic == null)
return;
bgMusic.volume = bgValue;
}
//--------------------------------------音效部分----------------------------------------
// 播放音效
public void PlaySound(string name, bool isLoop, UnityAction<AudioSource> callBack = null)//回调下一个音效前要将它置空
{
if(soundObj == null)
{
soundObj = new GameObject("Sound");
}
// //音效资源异步加载 也可以在缓存池中加载(适用于频繁使用音效的时候)
ResourceManager .GetInstance().LoadAsync<AudioClip>("音效路径" + 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);
});
}
// 改变所有音效声音大小
public void ChangeSoundValue( float value )
{
soundValue = value;
for (int i = 0; i < soundList.Count; ++i)
soundList[i].volume = value;
}
// 停止音效
public void StopSound(AudioSource source)
{
if( soundList.Contains(source) )
{
soundList.Remove(source);
source.Stop();
GameObject.Destroy(source);
}
}
}
AudioSource source;
MusicManager.GetInstance().PlaySound("as",true , (clip) => {
source = clip;
MusicManager.GetInstance().StopSound(source);
} );
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、