unityroomに投稿したゲームのBGMとSEの制御方法
久しぶりにunityroomに投稿した以下ゲームより、メモとして残しておきたい部分を記しておきます。
unityroom.com
BGMとSEの制御について
BGMとSEは、1つのゲームオブジェクトにAudio Sourceコンポーネントを2つ追加して制御しています。
1つがBGM用、もう1つがSE用という感じで。
こうすることで、BGMのボリュームだけ大きくしたり、SEのボリュームを小さくしたりといったことが可能なので重宝しています。
制御に使っているスクリプトは、以下の通りです。
[SerializeField] AudioSource audioSourceBGM; [SerializeField] AudioClip[] audioClipsBGM; [SerializeField] AudioSource audioSourceSE; [SerializeField] AudioClip[] audioClipsSE; public static SoundManager instance; private void Awake() { if (instance == null) { instance = this; } } void Start() { audioSourceBGM.Stop(); audioSourceBGM.clip = audioClipsBGM[0]; audioSourceBGM.Play(); } public void StopBGM() { audioSourceBGM.Stop(); } public void PlaySE(int index) { audioSourceSE.PlayOneShot(audioClipsSE[index]); }
BGMとSEの音源を、配列として格納可能にしています。
今回作ったゲームでは、BGM音源を1つ、SE音源を3つセットしています。
スクリプトに戻りますと、BGM音源は1つだけなのでStart()メソッドで再生しています。
SE音源に関しては、PlaySE(int index)メソッドを作成し、外部クラスから再生できるようにしています。引数によって、3つあるうち任意のSE音源が再生可能です。