一:目标

游戏音频的播放在任何游戏中都占据十分重要的位置,音频的播放能够分为两种,一种为游戏音乐,另一种为游戏音效。前者实用于较长的音乐,如游戏背景音乐。第二种实用于比拟短的游戏音乐,如开枪霎时的音效
在Unity中有两个对于音频的重要组件:AudioListener和AudioSource,通过AudioListener进行监听,AudioSource进行播放

所以咱们须要一个管理器对立治理音频的相干操作

二:解决的问题及长处

——音效的播放、暂停、持续、静音
——背景音乐的播放、暂停、持续、静音、渐隐

三:应用办法

——将所有音频文件对立放在Resources文件夹下的Sounds文件夹下
——应用SoundMgr.Ins.XXX

SoundMgr.Ins.PlayBGM("bgm");SoundMgr.Ins.PlaySound("coin");SoundMgr.Ins.StopPlay();SoundMgr.Ins.PausePlay();SoundMgr.Ins.BGMFade(2);

四:代码实现

using UnityEngine; /// <summary>/// 音频管理器/// </summary>public class SoundMgr : MonoSingleton<SoundMgr>{    public const string SoundDir = "Sounds/";//音频目录     //BGM播放器    private AudioSource bgmPlayer;    public AudioSource BgmPlayer { get { return bgmPlayer; } }    //音效播放器    private AudioSource soundPlayer;    public AudioSource SoundPlayer { get { return soundPlayer; } }     //是否静音    private bool isMute;    public bool IsMute { get { return isMute; } }     private bool bgmFade;//背景音乐是否渐隐    private float bgmFadeBeginVolume;//背景音乐渐隐开始时的音量    private float bgmFadeBeginTime;//背景音乐渐隐开始的工夫    private float bgmFadeDuration;//背景音乐渐隐的工夫     private void Awake()    {        if (bgmPlayer == null)        {            bgmPlayer = gameObject.AddComponent<AudioSource>();            bgmPlayer.loop = true;            bgmPlayer.playOnAwake = false;            bgmPlayer.mute = isMute;        }        if (soundPlayer == null)        {            soundPlayer = gameObject.AddComponent<AudioSource>();            soundPlayer.loop = false;            soundPlayer.playOnAwake = false;            soundPlayer.mute = isMute;        }    }     /// <summary>    /// 播放音效    /// </summary>    public void PlaySound(string soundName, float volume = 1, bool loop = false)    {        AudioClip clip = Resources.Load<AudioClip>(SoundDir + soundName);        if (clip == null)        {            Debug.LogError("没有此音频:" + soundName);            return;        }        soundPlayer.clip = clip;        soundPlayer.volume = volume;        soundPlayer.loop = loop;        soundPlayer.Play();    }     /// <summary>    /// 播放背景音乐    /// </summary>    public void PlayBGM(string bgmName, float volume = 1, bool loop = true)    {        AudioClip clip = Resources.Load<AudioClip>(SoundDir + bgmName);        if (clip == null)        {            Debug.LogError("没有此音频:" + bgmName);            return;        }        bgmPlayer.clip = clip;        bgmPlayer.volume = volume;        bgmPlayer.loop = loop;        bgmPlayer.Play();    }     /// <summary>    /// 背景音乐渐隐    /// </summary>    public void FadeBGM(float fadeDuration)    {        bgmFade = true;        bgmFadeBeginTime = Time.realtimeSinceStartup;        bgmFadeBeginVolume = bgmPlayer.volume;        bgmFadeDuration = fadeDuration;    }     /// <summary>    /// 暂停播放    /// </summary>    public void PausePlay()    {        bgmPlayer.Pause();        soundPlayer.Pause();    }    /// <summary>    /// 持续播放    /// </summary>    public void ResumePlay()    {        bgmPlayer.Play();        soundPlayer.Play();    }    /// <summary>    /// 进行播放    /// </summary>    public void StopPlay()    {        bgmPlayer.Stop();        soundPlayer.Stop();    }    /// <summary>    /// 设置静音    /// </summary>    public void SetMute(bool b)    {        isMute = b;        bgmPlayer.mute = isMute;        soundPlayer.mute = isMute;    }     /// <summary>    /// 进行播放BGM    /// </summary>    public void StopPlayBGM()    {        bgmPlayer.Stop();    }    /// <summary>    /// 暂停播放BGM    /// </summary>    public void PausePlayBGM()    {        bgmPlayer.Pause();    }    /// <summary>    /// 持续播放BGM    /// </summary>    public void ResumePlayBGM()    {        bgmPlayer.Play();    }    /// <summary>    /// 进行播放音效    /// </summary>    public void StopPlaySound()    {        soundPlayer.Stop();    }     private void Update()    {        if (bgmFade)        {            float delta = Time.realtimeSinceStartup - bgmFadeBeginTime;            if (delta <= bgmFadeDuration)            {                bgmPlayer.volume = Mathf.Lerp(bgmFadeBeginVolume, 0, delta / bgmFadeDuration);            }            else            {                bgmFade = false;                bgmPlayer.volume = 0;            }        }    }}

图片起源:http://www.coubai.com/ 页游