unity聲音控制
阿新 • • 發佈:2018-11-10
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指令碼。