关于 Unity 音乐音效管理

关于 Unity 音乐音效管理

本文转载自:http://blog.csdn.net/microsoftMSDNNET/article/details/47273239

在实战项目中,音乐音效的好坏肯定是一个玩家对此项目评定的一个因素之一。所以,有必要对音乐音效做出一个统一的管理。

 首先,我把几个音效放到了Resouces的Audios文件夹下,方便动态加载。
www.zeeklog.com  - 关于 Unity 音乐音效管理


之后,利用一个非常简单的单例,建了一个空物体当做管理音乐的gameObject,将音乐音效统一管理起来,代码如下:

public class SoundManager:MonoBehaviour 
{
    //------------------------------//
    /// <summary>
    /// 单例模式
    /// </summary>
    public static readonly SoundManager instance=new SoundManager ();
    private SoundManager ()
    {

    }
    //------------------------------//


    /// <summary>
    /// 将声音放入字典中,方便管理
    /// </summary>
    private Dictionary<string, AudioClip> _soundDictionary;
    private AudioSource [] audioSources;

    private AudioSource bgAudioSource;
    private AudioSource audioSourceEffect;

    void Awake()
    {
        instance = this;

        _soundDictionary = new Dictionary<string, AudioClip> ();

        //本地加载 
        AudioClip [] audioArray = Resources.LoadAll<AudioClip> ("AudioCilp");

        audioSources = GetComponents<AudioSource> ();
        bgAudioSource = audioSources [0];
        audioSourceEffect = audioSources [1];

        //存放到字典
        foreach (AudioClip item in audioArray) 
        {
            _soundDictionary.Add(item.name,item);
        }
    }

    //播放背景音乐
    public void PlayBGaudio(string audioName)
    {
        if (_soundDictionary.ContainsKey(audioName)) 
        {
            bgAudioSource.clip=_soundDictionary[audioName];
            bgAudioSource.Play();
        }
    }
    //播放音效
    public void PlayAudioEffect(string audioEffectName)
    {
        if (_soundDictionary.ContainsKey(audioEffectName)) 
        {
            audioSourceEffect.clip=_soundDictionary[audioEffectName];
            audioSourceEffect.Play();   
        }
    }
}

 
 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

音效是一直在场景中不消失的,所以要保证切换场景的时候资源不会删除。

    //=============================================//
    static bool isHaveAudio=false ;
    public GameObject tempGameObject;
    //=============================================//
    //不销毁音效
    void Start()
    {
        if (!isHaveAudio) 
        {
            tempGameObject=Instantiate(Resources.Load("SoundManage"))as GameObject;
            isHaveAudio=true ;
        }
        DontDestroyOnLoad (tempGameObject);
    }
 
 1234567891011121314

使用:先执行加载预设(Start())脚本。
SoundManage是个预设,预设绑定SoundManager.cs脚本。