【Unity】初心者でもわかる!AudioMixerを使った スライダーで音量調節する機能の作り方
はじめに
オプションなどで音量調節をするとき、スライド式の音量バーをたびたび見かけることがあります。いざ実装しようと思ったとき、AudioSourceだけでやろうとすると、それぞれの音の大きさを個別に変えられなかったりBGMとSEが混ざってしまったりと、いろいろと不便なものです。
そこで今回は、AudioMixerを使用した管理が簡単な音量調節バーの作り方を紹介します。
使用した環境とバージョン
今回はUnity ver.2021,3.4f1を使用しています。
また、プログラムを書く時にはVisual Studio 2022を使用しました。
達成目標
複数の音素材をBGMとSEに分けてスライダーで調節できるようにします。
では早速やっていきましょう。
準備
(出来ている方は飛ばしちゃって大丈夫です)
本記事はUnityを使用したものです。入ってない場合は入れましょう。
プログラムを書きます。書ける環境でやりましょう。
使う音素材をダウンロードしておきましょう。
(「.aif」「.wav」「.mp3」「.ogg」以外の型は使えないので注意!)音素材をダウンロードしたらAssetsフォルダーに入れておきましょう。
わかりやすいようにフォルダ分けしておくと便利です。AudioSourceを設定する。
まずは適当にゲームオブジェクトを作ります。
Hierarchy の下の + を押して Create Empty をクリックします。
次に作成したゲームオブジェクトにAudioSourceをアタッチします。
Add ComponentからAudioSourceを探してクリックします。
アタッチしたAudioSourceのAudioClipにAssetsフォルダーに入ってる音素材をドラック&ドロップしましょう。
これを入れた音素材の数だけ作ります。
(今回はBGM用の音2つとSE用の音2つの 合計4つ作りました)
AudioSourceの設定は完了です!
手順
①AudioMixerの作成と設定
まずAudioMixerを開きましょう。
上のタブからWindowを選択し、Audio→AudioMixerの順番に選択しましょう。
開いたAudioMixerの「Mixers」の隣にある + を押して新しいミキサーを作成しましょう。
名前はわかりやすいものにするといいですね。
Groupsの横の + を押して、新しいグループを作りましょう。
今回はBGMとSEを分けるので、BGM というグループと SE というグループを作ります。
そうしたら、グループをクリックした状態でinspectorのスライドを右クリックします。
その中の一番上の Expose"Volume (of BGM)"to script または Expose"Volume (of SE)"to script を選択します。
設定するとVolumeの右に矢印が出ます。
設定し終わると、AudioMixerの右上のExposed Parametersの中に新しいパラメーターが出来ていると思います。
これらの名前はプログラムを書く際に使うので、わかりやすい名前に変えましょう。
これでAudioMixerの設定は完了です!
②AudioSourceへのアタッチ
①で作ったグループをそれぞれのAudioSourceの Output にドラッグ&ドロップしましょう。
SEも同じくやりましょう。
これでAudioSourceへのアタッチは完了です!
③スライダーの作成
Hierarchy の下の + を押して UI から Slider をクリックし、スライダーを作成します。
大きくしたり位置を変えたりして好きな配置にしましょう。
今回は見やすさのために真ん中にドーンとおいてみました。
これでスライダーの作成は完了です!
④スライダーとグループの合体(代入)
とうとうプログラムに入ります。
スライダーを作った際、一緒にEventSystemというのが作成されたはずです。ヒエラルキーの中を探してみてください。
もしも無い場合はHierarchyのUIから作成してください。
EventSystemを選択した状態でInspectorの一番下にあるAdd ComponentからNew scriptを選択し、適当に名前を付けてスクリプトを作成しましょう。
まずはミキサーとスライダーのボリュームを合体させるプログラムを組みます。
作成したスクリプトを開いて、下のように書いてください。
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をドラッグ&ドロップしましょう。
右上のNo Functionをクリックして、先ほど作ったScriptを選ぶと、上のほうにSetBGMとSetSEが出てくると思います。
この二つをそれぞれのスライダーに設定してください。
そうしたら、その上にあるMax ValueとMin Valueをそれぞれ-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を使うことでより簡単に細かい音量の調節ができるようになりますのでぜひやってみてください!