Unity之C#——用單例實現一個遊戲內部的音效控制器
阿新 • • 發佈:2018-11-27
Unity之C#--用單例實現一個遊戲內部的音效控制器
在遊戲開發中,音效是很重要的一環,沒有音效的遊戲就沒有靈魂,所以實現聲音控制是很有必要的,同時,音效可能還會因玩家的性別不同,分為男女聲。我用單例寫了個簡單的聲音控制器,並且從Resources中動態讀取聲音,在場景中加了一個空物體命名為GamePlayAudio,把聲音控制器指令碼掛載上面。遊戲需要播放聲音時通過單例呼叫播放聲音的方法即可。
程式碼如下:
SoundManeger.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 聲音管理器,單例模式 /// </summary> public class SoundManeger : MonoBehaviour { private static SoundManeger _instance; public AudioSource source; private static GameObject gamePlayAudio; public static SoundManeger getInstance() { if(_instance==null) { GameObject temp = SoundManeger.gamePlayAudio; _instance = temp.GetComponentInChildren<SoundManeger>(); } return _instance; } void Start() { source = this.GetComponent<AudioSource>(); gamePlayAudio = this.gameObject; } void Update() { } /// <summary> /// 播放帶有性別區分的聲音的介面 /// </summary> /// <param name="str">聲音編號</param> /// <param name="sex">男:1,女:0</param> public void PlaySound(string str,int sex) { if(GlobalDataScript.soundToggle) { if (sex==1) { AudioClip clip = (AudioClip)Resources.Load("AudioClip/"+str+"boy", typeof(AudioClip)); source.PlayOneShot(clip,GlobalDataScript.volume); } else { AudioClip clip = (AudioClip)Resources.Load("AudioClip/"+str +"girl", typeof(AudioClip)); source.PlayOneShot(clip,GlobalDataScript.volume); } } return; } /// <summary> /// 播放其他的聲音介面 /// </summary> /// <param name="str">聲音的名字</param> public void PlaySound(string str) { if (GlobalDataScript.soundToggle) { AudioClip clip = (AudioClip)Resources.Load("AudioClip/" + str, typeof(AudioClip)); source.PlayOneShot(clip, GlobalDataScript.volume); } } }