Unity

【Unity】Sliderを使った音量調整機能

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」にチェックを入れます。

再生し、スライダーを動かしてみる

音量注意

音楽:魔王魂

音量が変化しているのを確認!

とりあえず今回はここまで

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です