【Unity】初心者でもわかる!AudioMixerを使った スライダーで音量調節する機能の作り方

はじめに


 オプションなどで音量調節をするとき、スライド式の音量バーをたびたび見かけることがあります。いざ実装しようと思ったとき、AudioSourceだけでやろうとすると、それぞれの音の大きさを個別に変えられなかったりBGMとSEが混ざってしまったりと、いろいろと不便なものです。
 そこで今回は、AudioMixerを使用した管理が簡単な音量調節バーの作り方を紹介します。


使用した環境とバージョン


 今回はUnity ver.2021,3.4f1を使用しています。
 また、プログラムを書く時にはVisual Studio 2022を使用しました。

達成目標


 複数の音素材をBGMとSEに分けてスライダーで調節できるようにします。

 では早速やっていきましょう。

準備


(出来ている方は飛ばしちゃって大丈夫です)

  1. 本記事はUnityを使用したものです。入ってない場合は入れましょう。

  2. プログラムを書きます。書ける環境でやりましょう。

  3. 使う音素材をダウンロードしておきましょう。
    (「.aif」「.wav」「.mp3」「.ogg」以外の型は使えないので注意!)

  4. 音素材をダウンロードしたらAssetsフォルダーに入れておきましょう。
    わかりやすいようにフォルダ分けしておくと便利です。

  5. AudioSourceを設定する。
    まずは適当にゲームオブジェクトを作ります。
    Hierarchy の下の + を押して Create Empty をクリックします。

 一番上にありますね

 次に作成したゲームオブジェクトにAudioSourceをアタッチします。
 Add ComponentからAudioSourceを探してクリックします。

Au だけでもAudio系に絞れますが、不安ならAudioSまで書いちゃいましょう

 アタッチしたAudioSourceのAudioClipにAssetsフォルダーに入ってる音素材をドラック&ドロップしましょう。

AudioSourseの一番上にあります

 これを入れた音素材の数だけ作ります。
 
(今回はBGM用の音2つとSE用の音2つの 合計4つ作りました)

 AudioSourceの設定は完了です!

手順


①AudioMixerの作成と設定

まずAudioMixerを開きましょう。
上のタブからWindowを選択し、Audio→AudioMixerの順番に選択しましょう。

かなり下のほうにあるAudio。よく見失う。

開いたAudioMixerの「Mixers」の隣にある + を押して新しいミキサーを作成しましょう。
名前はわかりやすいものにするといいですね。

プラスを押した直後。
決定ボタンを押すとこんな感じになります。
今回使うのは下から二番目のGroups(グループ)です。

Groupsの横の + を押して、新しいグループを作りましょう。
今回はBGMとSEを分けるので、BGM というグループと SE というグループを作ります。

片方を作った後、もう一度Masterを選択してから作成しないと片方に入ってしまうので注意!!

そうしたら、グループをクリックした状態でinspectorのスライドを右クリックします。

volumeと書いてあるところを右クリックします

その中の一番上の Expose"Volume (of BGM)"to script または Expose"Volume (of SE)"to script を選択します。

(of BGM)のBGMの部分はグループ名が入ります

設定するとVolumeの右に矢印が出ます。

設定後
volumeの右に矢印が付いてる

設定し終わると、AudioMixerの右上のExposed Parametersの中に新しいパラメーターが出来ていると思います。
これらの名前はプログラムを書く際に使うので、わかりやすい名前に変えましょう。

Exposed Parametersの右の ( ) が(0)から(2)になっている
今回はグループ名と同じBGMとSEにしました。

これでAudioMixerの設定は完了です!

②AudioSourceへのアタッチ

①で作ったグループをそれぞれのAudioSourceの Output にドラッグ&ドロップしましょう。

アウトプットはAudioClipの下にあります
BGMの入ったAudioSourceにはBGMをまとめるグループを、
SEの入ったAudioSourceにはSEをまとめるグループをアタッチしましょう

SEも同じくやりましょう。

SE

これでAudioSourceへのアタッチは完了です!

③スライダーの作成

Hierarchy の下の + を押して UI から Slider をクリックし、スライダーを作成します。

Scrollbarと注意!

大きくしたり位置を変えたりして好きな配置にしましょう。

今回は見やすさのために真ん中にドーンとおいてみました。

画面のど真ん中に置かれたスライダー。
TextMeshProで文字いれてどっちがどっちかわかるようにしてみました。

これでスライダーの作成は完了です!

④スライダーとグループの合体(代入)

とうとうプログラムに入ります。
スライダーを作った際、一緒にEventSystemというのが作成されたはずです。ヒエラルキーの中を探してみてください。

もしも無い場合はHierarchyのUIから作成してください。

イベントシステム

EventSystemを選択した状態でInspectorの一番下にあるAdd ComponentからNew scriptを選択し、適当に名前を付けてスクリプトを作成しましょう。

一番下にあります。検索欄に適当に打っても出てきます
今回はわかりやすいようにAudioという名前にしました。

まずはミキサーとスライダーのボリュームを合体させるプログラムを組みます。
作成したスクリプトを開いて、下のように書いてください。

using UnityEngine.UI;

public class Audio : MonoBehaviour
{
    //Audioミキサーを入れるとこです
    [SerializeField] AudioMixer audioMixer;

    //それぞれのスライダーを入れるとこです。。
    [SerializeField] Slider BGMSlider;
    [SerializeField] Slider SESlider;

    private void Start()
    {
        //ミキサーのvolumeにスライダーのvolumeを入れてます。

        //BGM
        audioMixer.GetFloat("BGM", out float bgmVolume);
        BGMSlider.value = bgmVolume;
        //SE
        audioMixer.GetFloat("SE", out float seVolume);
        SESlider.value = seVolume;
    }
}


簡単な解説

まず上のusing群にUnityEngine.UIを入れましょう。
これでUI関連のシステムが簡単にいじれるようになります。

using UnityEngine.UI;

usingの下の最初の3つのSerializeFieldでスライダーとオーディオミキサーを読み込みます。
publicとかでも一応大丈夫ですが、自分はあまり好きじゃないので今回はSerializeFieldでやってます。

  //AudioMixerを入れるとこです
    [SerializeField] AudioMixer audioMixer;
    //BGMのスライダーを入れるとこです。
    [SerializeField] Slider BGMSlider;
    //SEのスライダーを入れるとこです。
    [SerializeField] Slider SESlider;

その下のこれはミキサーの中のグループからBGMやSEを呼んできて、そのボリュームとそれぞれのスライダーのボリュームを少数型とかで合体させてるところです。
もっと簡単に言うと、スライダーのボリュームにグループのボリュームを入れてます。

 private void Start()
    {
        //ミキサーのvolumeにスライダーのvolumeを入れてます。

        //BGM
        audioMixer.GetFloat("BGM", out float bgmVolume);
        BGMSlider.value = bgmVolume;
        //SE
        audioMixer.GetFloat("SE", out float seVolume);
        SESlider.value = seVolume;
    }

とりあえずこれで保存してUnityに戻ります。
そうすると、先ほどはなかったはずの枠が三つ現れてるはずです。

現れた三つの枠。()の中の形式のものだけが入る。

ここにそれぞれミキサーとスライダーを入れましょう。
今回はグループじゃなくミキサー本体なので、Projectファイル内から探しましょう。

右の◎から探すのが一番早いかもしれない。
全部入れるとこんな感じ

これで合体させることができました!

⑤それぞれのスライダーへ設定

ここまで出来たらもう一度プログラムに戻ります。
先ほど書いたStartより下にこのように書きます。

  public void SetBGM(float volume)
    {
        audioMixer.SetFloat("BGM", volume);
    }

    public void SetSE(float volume)
    {
        audioMixer.SetFloat("SE", volume);
    }

簡単な解説

この二つはそれぞれ別のスライダーで動くもので、上はBGM、下はSEといった感じです。
ここはpublicにしておくことでスライダーから呼び出せるようになります。
中の処理でミキサーの値を変えてます。①の時に変えたパラメーターの名前はここで使います。

 public void SetBGM(float volume)
    {
        audioMixer.SetFloat("BGM", volume);
    }
 public void SetSE(float volume)
    {
        audioMixer.SetFloat("SE", volume);
    }

これを保存して、Unityに戻ります。
スライダーを選択して、一番下のほうにあるOnValueChangedの+を押して、
左下の枠にEventSystemをドラッグ&ドロップしましょう。

左下にEventSystemが入ってる

右上のNo Functionをクリックして、先ほど作ったScriptを選ぶと、上のほうにSetBGMとSetSEが出てくると思います。
この二つをそれぞれのスライダーに設定してください。

今回はAudioという名前でScriptを作ったので
一番下にあるAudioを選択

そうしたら、その上にあるMax ValueとMin Valueをそれぞれ-80と0に変えましょう。

-80/0という値はミキサーの方に合わせてるためです。
ミキサーをスライダーに合わせる方法もあります。

これで完成となります!

ここまで完了しましたら一度再生してスライダーを動かして確認してみてください。

結果


スライダーを動かすと音量が変わるようになりました!

スライダーと下のボリュームが連動してますね!


今回作ったスクリプトはこんな感じです。

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

public class Audio : MonoBehaviour
{
    //Audioミキサーを入れるとこです
    [SerializeField] AudioMixer audioMixer;

    //それぞれのスライダーを入れるとこです。
    //多い場合は配列にしてもいいですね。
    [SerializeField] Slider BGMSlider;
    [SerializeField] Slider SESlider;

    private void Start()
    {
        //ミキサーのvolumeにスライダーのvolumeを入れてます。

        //BGM
        audioMixer.GetFloat("BGM", out float bgmVolume);
        BGMSlider.value = bgmVolume;
        //SE
        audioMixer.GetFloat("SE", out float seVolume);
        SESlider.value = seVolume;
    }

    //スライダーで使う部分です。
    public void SetBGM(float volume)
    {
        audioMixer.SetFloat("BGM", volume);
    }

    public void SetSE(float volume)
    {
        audioMixer.SetFloat("SE", volume);
        //ここで確認用の音を鳴らしても良さそう。
    }
}


まとめ


 今回はオプションなどで音量調節をするときのスライド式の音量バーをUnityで作りました。
 AudioMixerの設定、AudioSourceやスライダーへのアタッチ、そして少しプログラムを書くだけで簡単に設定することができましたね。

 音量をスライダーで調節する方法はAudiSourceだけでもできますが、AudioMixerを使うことでより簡単に細かい音量の調節ができるようになりますのでぜひやってみてください!

参考


いいなと思ったら応援しよう!