👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:Unity基础实战
⭐🅰️⭐
文章目录
- ⭐🅰️⭐
- ⭐前言⭐
- 🎶(==W==) 涉及知识点
- 🎶(==W==) 2D音乐中心管理器
- 1.知识点
- 2.特色
- 测试脚本
- ⭐🅰️⭐
⭐前言⭐
🎶(W) 涉及知识点
- List泛型类
🎶(W) 2D音乐中心管理器
1.知识点
2.特色
- 统一管理项目中的音乐音效
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);
} );
⭐🅰️⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、