【Unity】Sliderでサウンド調節できるようにしよう!③

Audio Unity

Sliderでサウンド調節できるようにしよう!

2回にわたってSliderを使ってゲーム内のBGMやSEの音量を変更できる機能の実装方法を解説してきましたが今回が最終回になります。

こちらが完成品になります。全3回すべて同じようにおこなうと動画のようなものができるようになります。(Displayのサイズ設定によりUIの位置が多少誤差があります)

Sliderで音量調節できるようにしよう!

前回までで、SliderとTextを連携させてSliderのValueの値が変化するとTextの値もSliderのValueの値に応じて変化するようにしました。

今回は、実際にBGMとSEを追加してSliderで音量を調節できるようにしていきます。

スクリプトを作成

音楽を再生するためのスクリプトを作成します。

Assets→Create→C#Script

Create-Script

スクリプト名はAudioManagerとします。

AudioManagerスクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AudioManager : MonoBehaviour
{
[SerializeField] AudioClip[] seList;//BGMを読み込む
[SerializeField] AudioSource audioSourceBGM;//BGMの音の大きさを調節するために読み込む

[SerializeField] AudioClip[] bgmList;//SEを読み込む
[SerializeField] AudioSource audioSourceSE;//SEの音の大きさを調節するために読み込む

//BGMのボリューム調節する関数を作成
public float BGMVolume
{
//audioSourceBGMのvolumeをいじることでBGMを調整
get { return audioSourceBGM.volume; }
set { audioSourceBGM.volume = value; }
}

//SEのボリュームを調節する関数を作成
public float SEVolume
{
//audioSourceSEのvolumeをいじることでSEを調整
get { return audioSourceSE.volume; }
set { audioSourceSE.volume = value; }
}

//SecneをまたいでもObjectが破壊されないようにする
static AudioManager Instance = null;

public static AudioManager GetInstance()
{
if (Instance == null)
{
Instance = FindObjectOfType<AudioManager>();
}
return Instance;
}

private void Awake()
{
if(this != GetInstance())
{
Destroy(this.gameObject);
return;
}
DontDestroyOnLoad(this.gameObject);
}

//BGMを再生する関数を作成
public void PlayBGM(int index)
{
audioSourceBGM.clip = bgmList[index];
audioSourceBGM.Play();
}

//SEを再生する関数を作成
public void PlaySound(int index)
{
audioSourceSE.PlayOneShot(seList[index]);
}

}

AudioManagerの追加スクリプトの内容は、コメントで説明してあるのでコメントをしっかり見て理解してください。

Assetsフォルダに入っているだけでは、スクリプトを使うことができません。GameObjectにAdd Componentすることで初めて使うことができるようになります。先ほど作成した、AudioManagerスクリプトを空のGameObjectにAdd Componentしましょう。

Hierarchy→Create Empty

Create-Empty

このままGameObjectの名前がGameObjectでは、どんなObjectなのかわからないので、GameObjectの名前をAudioPresenterに変更しておいてください。

AudioManagerにAssetsフォルダにあるAudioManagerスクリプトをドラックアンドドロップして追加します。

Add-AudioManager

AudioManagerにBGM用とSE用の2つのAudioSource Component追加します。

AudioSource

各AudioSourceの設定をしていきましょう。

まずは、BGM用のAudioSource Componet

BGMは実行と同時に再生され音楽をLoopさせてあげる必要があります。

AudioSource CompinentのLoopにチェックを入れておきましょう。

BGM-AudioSource

 

次にSE用のAudioSource Componetの設定をしていきます。

SEは何かのイベントが起こった場合のみ鳴らしたいのでPlay On Awakeのチェックを外しておきます。Play On Awakeは開始と同時にという意味で、ここにチェックが入っていると実行するとSEが鳴ってしまいます。

SE-AudioSource

AudioManagerの設定が完了したので、AudioSource BGMとAudioSource SEにそれぞれドラックアンドドロップで追加してください。

Add-AudioSource

次にAudioManagerスクリプトにBGMとSEを追加します。

今回はフリー音源サイト魔王魂より音源をダウンロードしておきました。

Add

BGMをBgm Listに追加、SEをSe Listに追加にしましょう!

Add-BGM&SE

SoundPresenterスクリプトを変更

AudioManagerで作成した関数をSoundPresenterで呼び出します。

以下のことを行います。

  • SoundPresenterスクリプトのStart関数でAudioManagerスクリプトのPlayBGM関数を呼んでBGMを再生できるようにする
  • SoundPresenterスクリプトのOnPushButton関数でAudioManagerスクリプトのPlaySound関数を呼んでSEを再生
  • SoundPresenterスクリプトのOnChangeBGMSlider関数でAudioManagerスクリプトのBGMVolume関数を呼んでSliderの値によってBGMの音量を調節できるようにする
  • SoundPresenterスクリプトのOnChangeSESlider関数でAudioManagerスクリプトのSEVolume関数を呼んでSliderの値によってSEの音量を調節できるようにする

変更後のSoundPresenterスクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SoundPresenter : MonoBehaviour
{
//BGM
[SerializeField] Text bgmVolumeText;//BGMMenuViewのvolumeTextを取得
[SerializeField] Slider bgmSlider;//BGMMenuViewのsliderを取得

//SE
[SerializeField] Text seVolumeText;//SEMenuViewのvolumeTextを取得
[SerializeField] Slider seSlider;//SEMenuViewのsliderを取得

void Start()
{
//BGMを再生
AudioManager.GetInstance().PlayBGM(0);
}

//BGMMenuViewのSliderを動かしたときに呼び出す関数を作成
public void OnChangedBGMSlider()
{
//Sliderの値に応じてBGMを変更
AudioManager.GetInstance().BGMVolume = bgmSlider.value;
//volumeTextの値をSliderのvalueに変更
bgmVolumeText.text = string.Format("{0:0}", bgmSlider.value*100);
}

//SEMenuViewのSliderを動かしたときに呼び出す関数を作成
public void OnChangedSESlider()
{
//Sliderの値に応じてSEを変更
AudioManager.GetInstance().SEVolume = seSlider.value;
//volumeTextの値をSliderのvalueに変更
seVolumeText.text = string.Format("{0:0}", seSlider.value*100);
}

//Buttonを押したときに呼ばれる関数
public void OnPushButton()
{
//SEを再生
AudioManager.GetInstance().PlaySound(0);
}
}

以上でSliderの値によってBGMやSEの音量を調節できるようになりました。

実行してみると動画のようになります。

 

【Unity】Sliderでサウンド調節できるようにしよう!②
前回からSliderを使ってゲーム内のBGMやSEの音量を変更できる機能の実装方法を解説しています。 今回はSliderとVolumeTextを連携させてSliderのValueの値が変化するとVolumeTextの値も変化させれるようにします。

 

コメント

タイトルとURLをコピーしました