1. 程式人生 > >unity聲音控制

unity聲音控制

Unity中控制聲音播放所需三個必要元件,分別是AudioSource、AudioClip、AudioListener,其作用如下:

AudioSource—聲音的控制組件,包含了控制聲音播放、暫停、停止等方法。

AudioClip—聲音的源片段,即需要播放的聲音物件。

AudioListener—聲音偵聽器,沒有它則無聲音。

 

 

 首先,我把幾個音效放到了Resouces的Audios資料夾下,方便動態載入。
  • 1
  • 2

這裡寫圖片描述 
之後,利用一個非常簡單的單例,建了一個空物體當做管理音樂的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();   
        }
    }
}

音效是一直在場景中不消失的,所以要保證切換場景的時候資源不會刪除。

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

使用:先執行載入預設(Start())指令碼。 
SoundManage是個預設,預設繫結SoundManager.cs指令碼。