Sliderでの音量調整機能
今回は、Unityでの音量調整機能を実装します。
BGMと効果音の音量を、スライダー(Slider)を使って自由に変更できるようにしていきます。
スライダーの作成
HierarchyにCanvasを作成しその下にPanelを作成。
Panelの色はわかりやすく黒に変更します。

Panelの上で右クリックし、UI→「Slider」でスライダーを作成。

2つ作成し、それぞれ名前を「BGMSlider」「SESlider」に変更。


スライダーのスケールとポジションを見やすいサイズと位置に調整。
インスペクターのValueを動かすと連動しスライダーが動く

オーディオミキサーの作成
まずはオーディオミキサーを作成します。
Window→Audio→『Audio Mixer』を選択

Mixersの横の「+」を押しNewAudioMixerを作成


次はGroupsの横の「+」を押し「BGM」を作成
再度Masterを選択し「+」を押し「SE」を作成


BGMを選択し、InspectorのVolume辺りで右クリックし、
「Expose’Volume~’ to Script」を選択。

SEも同じように「Expose’Volume~’ to Script」にする。

Volumeの横に「→」が付いたらOK
Exposed Parametersにあるパラメータ2つを、それぞれわかりやすい名前に変更
(今回は「BGM」「SE」に変更)


SoundManagerの作成
HierarchyにCreateEmptyで空のオブジェクトを作成。
名前を「SoundManager」にします。
Assetsに「SoundManager」のスクリプトを作成しオブジェクトにアタッチ。

Inspectorに音を鳴らすための「Audio Source」を2つ追加

Audio SourceのOutputにそれぞれ「BGM」と「SE」を設定する。

それぞれBGMとSEを分けて鳴らすためのものになっているよ
SoudManager.cs
スクリプトを作成します
SoudManager.cs
using UnityEngine;
// AudioMixer使用するために必要
using UnityEngine.Audio;
// スライダーを使用するために必要
using UnityEngine.UI;
public class SoundManager : MonoBehaviour
{
// AudioMixerとSliderをSerializeFieldで取得する
[SerializeField] private AudioMixer audioMixer;
[SerializeField] private Slider bgmSlider;
[SerializeField] private Slider seSlider;
private void Start()
{
if (bgmSlider != null)
{
// BGMのボリュームをbgmSliderで調整できるようにする
bgmSlider.onValueChanged.AddListener(OnBGMVolumeChanged);
}
if (seSlider != null)
{
// SEのボリュームをseSliderで調整できるようにする
seSlider.onValueChanged.AddListener(OnSEVolumeChanged);
}
}
// スライダーの値をdB(デシベル)に変換して、AudioMixerの「BGM」パラメータに反映させる
private void OnBGMVolumeChanged(float value)
{
value = Mathf.Clamp01(value);
float decibel = 20f * Mathf.Log10(value);
decibel = Mathf.Clamp(decibel, -80f, 0f);
// "BGM"はAudioMixerで定義したパラメータ名をと一致している必要がある
audioMixer.SetFloat("BGM", decibel);
}
// スライダーの値をdB(デシベル)に変換して、AudioMixerの「SE」パラメータに反映させる
private void OnSEVolumeChanged(float value)
{
value = Mathf.Clamp01(value);
float decibel = 20f * Mathf.Log10(value);
decibel = Mathf.Clamp(decibel, -80f, 0f);
// "SE"はAudioMixerで定義したパラメータ名をと一致している必要がある
audioMixer.SetFloat("SE", decibel);
}
}
SoudManagerのインスペクターの設定
AudioMixer、BgmSlider、SeSliderをそれぞれアタッチ

実行
音量調節機能の用意ができたのでテストします。
フリーのBGMを用意し、Unityへインポートします。
BGMをAudio Sourceへセットし、「Play On Awake」と「Loop」にチェックを入れます。

再生し、スライダーを動かしてみる
音量注意
音楽:魔王魂
音量が変化しているのを確認!
とりあえず今回はここまで