功能描述:
1.此AudioManager做成1个单例,在使用单例的时候会先判断场景中有没生成对应的GameObject,若没有,则生成一个。
2.建立2个AudioSource,一个用于播放游戏背景音乐,一个用于播放游戏音效
3.AuidioManager中制作如下几个功能:播放背景音乐,播放游戏音效,设置背景音乐音量,设置音效音量,音乐暂停,音乐继续
代码如下:
public class AudioManager : MonoBehaviour {
public bool isOpenSoundEffect = true; //是否开启游戏音效
public bool isOpenBgMusic = true; //是否开启游戏背景音乐
private bool isOpenBgMusicPrev = true;
private static AudioManager instance;
string prevBgMusic;
private AudioSource m_bgMusicSource;
private AudioSource m_shotMusicSource;
public static AudioManager Instance
{
get
{
if(instance == null)
{
GameObject audioGo = new GameObject("AudioManager"); //新建一个游戏对象
GameObject shotSource = new GameObject ("OneShot");
shotSource.transform.SetParent (audioGo.transform);
instance = audioGo.AddComponent<AudioManager> ();
instance.m_bgMusicSource = audioGo.AddComponent<AudioSource> ();
instance.m_shotMusicSource = shotSource.AddComponent<AudioSource> ();
DontDestroyOnLoad(audioGo);
}
return instance;
}
}
//设置背景音乐的音量
public void SetBgAudioVolume(float value){
m_bgMusicSource.volume = value;
}
//获取背景音乐的音量
public float GetBgAudioVolume(){
return m_bgMusicSource.volume;
}
//设置音效的音量
public void SetShotAudioVolume(float value){
m_shotMusicSource.volume = value;
}
//获取音效的音量
public float GetShotAudioVolume(){
return m_shotMusicSource.volume;
}
//播放加载的游戏音效
public void PlaySoundEffect(string clipPath){
if(isOpenSoundEffect ){
AudioClip clip = Resources.Load(clipPath) as AudioClip;
PlaySoundEffect (clip);
}
}
//播放游戏音效
public void PlaySoundEffect(AudioClip clip){
if (clip == null)
return;
if(isOpenSoundEffect ){
m_shotMusicSource.clip = clip;
m_shotMusicSource.Play();
}
}
//播放一次游戏音效
public void PlayOneShot(string clipPath,float volumeScale = 1f){
if(isOpenSoundEffect ){
AudioClip clip = Resources.Load(clipPath) as AudioClip;
PlayOneShot (clip, volumeScale);
}
}
//播放一次游戏音效
public void PlayOneShot(AudioClip clip,float volumeScale = 1f){
if (isOpenSoundEffect) {
if(clip == null)return;
m_shotMusicSource.PlayOneShot(clip, volumeScale);
}
}
//根据音频地址播放背景音乐
public void PlayBgMusic(string clipPath){
if (isOpenBgMusic) {
string clipName = clipPath.Substring (clipPath.LastIndexOf ("/") + 1);
if (prevBgMusic == clipName)
return;
AudioClip clip = Resources.Load(clipPath) as AudioClip;
PlayBgMusic (clip);
}
}
//播放背景音乐,如果当前音乐不是要播放的背景音乐,则播放当前音乐
public void PlayBgMusic(AudioClip clip){
if(clip == null){
return;
}
string clipName = clip.name;
if(isOpenBgMusic){
if (prevBgMusic == clipName) {return;} else {StopBgMusic();}
m_bgMusicSource.loop = true;
m_bgMusicSource.clip = clip;
if(m_bgMusicSource.clip != null && m_bgMusicSource.isPlaying == false){
m_bgMusicSource.Play();
}
}
prevBgMusic = clipName;
}
//停止播放背景音乐,并把背景音乐设置为空
public void StopBgMusic(){
if(m_bgMusicSource != null && m_bgMusicSource.isPlaying){
m_bgMusicSource.Stop();
m_bgMusicSource.clip = null;
}
prevBgMusic = null;
}
//继续播放背景音乐
public void ReSumeBgMusic(){
if(m_bgMusicSource != null && m_bgMusicSource.clip != null){
m_bgMusicSource.Play();
}
}
//暂停播放背景音乐
public void PauseBgMusic(){
if(m_bgMusicSource != null && m_bgMusicSource.clip != null){
m_bgMusicSource.Pause();
}
}
}