简易的AudioManager实现

功能描述:
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();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值