UnityにおけるAudioMixerを使用したBGM音量制御の技術資料
本資料では、UnityのAudioMixerを活用してBGM(バックグラウンドミュージック)の音量を設定および取得する方法について詳細に解説します。提供するC#スクリプトと設定手順に従うことで、プロジェクト内での音量制御を効率的に実装できます。
概要
UnityのAudioMixerは、オーディオのミキシングと制御を行う強力なツールです。本資料では、AudioMixerを用いてBGMの音量を動的に設定および取得する方法について解説します。具体的には、AudioManagerクラスを作成し、スクリプトから音量を操作する手順を示します。

必要な準備
- Unityのインストール: Unity 6 以降のUnityエディタがインストールされていることを確認してください。
- プロジェクトの作成: 新規プロジェクトを作成するか、既存のプロジェクトを使用します。
- オーディオファイルの準備: BGMとして使用するオーディオファイル(例:
.mp3,.wav)をプロジェクトにインポートします。
スクリプトの作成
まず、AudioMixerを操作するためのC#スクリプトを作成します。以下はAudioManager.csという名前のスクリプトの完全な例です。
AudioManager.cs
using UnityEngine;
using UnityEngine.Audio;
// Start の実行順を他のスクリプトより先にする(スライダーが音量を取得する前に初期化を終えるため)
[DefaultExecutionOrder(-100)]
public class AudioManager : MonoBehaviour
{
[SerializeField]
private AudioMixer audioMixer;
// AudioMixerで公開(Expose)したパラメータ名と一致させる
private const string BgmVolumeParameter = "BGMVolume";
// 最小値(0だと対数が計算できないため、ほぼ無音の値にする)
public const float MinVolume = 0.0001f;
void Start()
{
// 初期音量(0〜1)。0.1 はおよそ -20 dB
SetBGMVolume(0.1f);
// 現在のBGM音量を取得して表示
if (GetBGMVolume(out float currentVolume))
{
Debug.Log("現在のBGM音量: " + currentVolume);
}
else
{
Debug.LogError("BGMVolumeパラメータの取得に失敗しました。");
}
}
/// <summary>
/// BGMの音量を設定します。
/// </summary>
/// <param name="volume">音量(0〜1。0が無音、1が元の音量)</param>
public void SetBGMVolume(float volume)
{
if (audioMixer == null)
{
Debug.LogError("AudioMixerが割り当てられていません。");
return;
}
// 0〜1 の値をデシベルに変換する(0.0001 → -80 dB、1 → 0 dB)
float clamped = Mathf.Clamp(volume, MinVolume, 1f);
float db = Mathf.Log10(clamped) * 20f;
audioMixer.SetFloat(BgmVolumeParameter, db);
}
/// <summary>
/// BGMの現在の音量を取得します。
/// </summary>
/// <param name="volume">取得した音量(0〜1)</param>
/// <returns>成功すればtrue、失敗すればfalse</returns>
public bool GetBGMVolume(out float volume)
{
volume = 0f;
if (audioMixer == null)
{
Debug.LogError("AudioMixerが割り当てられていません。");
return false;
}
if (audioMixer.GetFloat(BgmVolumeParameter, out float db))
{
// デシベルを 0〜1 の値に戻す
volume = Mathf.Pow(10f, db / 20f);
return true;
}
return false;
}
}
スクリプトの説明
[SerializeField] private AudioMixer audioMixer;- インスペクターから
AudioMixerを割り当てるためのフィールド。SerializeField属性により、プライベート変数でもインスペクター上で編集可能です。
- インスペクターから
SetBGMVolume(float volume)メソッド- 0〜1の値(0が無音、1が元の音量)を受け取り、デシベルに変換してBGMの音量を設定します。
AudioMixerのSetFloatはデシベルで値を受け取るため、Mathf.Log10(値) * 20で変換しています。AudioMixer内にBGMVolumeというパラメータが公開されている必要があります。
- 0〜1の値(0が無音、1が元の音量)を受け取り、デシベルに変換してBGMの音量を設定します。
GetBGMVolume(out float volume)メソッド- 現在のBGM音量を0〜1の値で取得します。
AudioMixer.GetFloatは取得に成功すればtrueを返し、失敗すればfalseを返します。デシベルから0〜1への戻しはMathf.Pow(10, db / 20)です。
- 現在のBGM音量を0〜1の値で取得します。
Start()メソッド- スクリプトの開始時に初期音量を設定し、現在の音量をログに表示します。
[DefaultExecutionOrder(-100)]Start()の実行順を他のスクリプトより先にする属性です。スライダー側が音量を取得するより前に、初期音量の設定を終えられます。

Unityエディタでの設定
次に、Unityエディタ上での設定手順について説明します。
ポイント1 AudioMixerの作成と設定
- AudioMixerの作成
- Unityエディタで、
Assetsフォルダ内で右クリックし、Create>Audio Mixerを選択します。 - 新しい
AudioMixerに適切な名前を付けます。例:MainAudioMixer.
- Unityエディタで、
- グループの設定
- 作成した
AudioMixerをダブルクリックして開きます。 - デフォルトで存在する
Masterグループの下に新しいグループを作成します。- 右クリックして
Create Groupを選択し、名前をBGMとします。
- 右クリックして
- 作成した
- パラメータの公開(Expose)
BGMグループを選択し、インスペクターのVolumeの項目名を右クリックして、Expose 'Volume (of BGM)' to scriptを選びます。
- 公開したパラメータの名前を変更
AudioMixerウィンドウの右上にあるExposed Parametersを開き、公開したパラメータをダブルクリックしてBGMVolumeという名前に変更します。これにより、スクリプトからBGMVolumeを参照できるようになります。

ポイント2 AudioManagerスクリプトの設定
- スクリプトの追加
- 先ほど作成した
AudioManager.csスクリプトを、プロジェクト内の適当なフォルダに保存します。例:Scriptsフォルダ。
- 先ほど作成した
- GameObjectへのアタッチ
- シーン内の適当なGameObject(例:
AudioManagerという名前の空のGameObject)を選択します。 - インスペクターで
Add Componentボタンをクリックし、AudioManagerスクリプトをアタッチします。
- シーン内の適当なGameObject(例:
- AudioMixerの割り当て
- アタッチした
AudioManagerコンポーネントのAudio Mixerフィールドに、先ほど作成したMainAudioMixerをドラッグ&ドロップします。
- アタッチした
ポイント3 オーディオソースの設定
- BGM用のオーディオソースの作成
- シーン内にBGMを再生するためのオーディオソースを持つGameObjectを配置します。例:
BGMPlayer.
- シーン内にBGMを再生するためのオーディオソースを持つGameObjectを配置します。例:
- オーディオソースの設定
BGMPlayerオブジェクトを選択し、インスペクターでAudio Sourceコンポーネントを追加します。Audio Clipフィールドに、使用するBGMオーディオファイルを割り当てます。Outputフィールドに、MainAudioMixer内のBGMグループを設定します。MainAudioMixerの下にあるBGMグループをドラッグ&ドロップします。
- オーディオソースの再生設定
Audio SourceコンポーネントでPlay On Awakeを有効にするか、スクリプトから再生を制御します。
使用例
AudioManagerスクリプト内のSetBGMVolumeおよびGetBGMVolumeメソッドを他のスクリプトから呼び出して、BGMの音量を動的に変更・取得することができます。以下に、UIのスライダーと連携して音量を調整する例を示します。
BGMVolumeSlider.cs
using UnityEngine;
using UnityEngine.UI;
public class BGMVolumeSlider : MonoBehaviour
{
[SerializeField]
private AudioManager audioManager;
[SerializeField]
private Slider volumeSlider;
void Start()
{
if (audioManager == null || volumeSlider == null)
{
Debug.LogError("AudioManagerまたはVolumeSliderが割り当てられていません。");
return;
}
// スライダーの範囲を 0.0001〜1 にそろえる(AudioManagerの音量と同じ範囲)
volumeSlider.minValue = AudioManager.MinVolume;
volumeSlider.maxValue = 1f;
// 初期スライダー値を現在の音量に設定
if (audioManager.GetBGMVolume(out float currentVolume))
{
volumeSlider.value = currentVolume;
}
// スライダーの値が変更されたときに音量を設定
volumeSlider.onValueChanged.AddListener(SetVolume);
}
/// <summary>
/// スライダーの値に基づいてBGMの音量を設定します。
/// </summary>
/// <param name="volume">スライダーの値(0〜1)</param>
public void SetVolume(float volume)
{
audioManager.SetBGMVolume(volume);
}
}

使用手順
- スライダーの作成
- シーン内にUIのスライダーを追加します。
- メニューから
GameObject>UI>Sliderを選択します。
- メニューから
- シーン内にUIのスライダーを追加します。
- BGMVolumeSliderスクリプトの追加
- 新しく
BGMVolumeSlider.csというスクリプトを作成し、上記のコードを貼り付けます。 - スクリプトをスライダーオブジェクトにアタッチします。
- 新しく
- スクリプトの設定
- スライダーオブジェクトのインスペクターで、
BGMVolumeSliderコンポーネントのAudioManagerフィールドに、AudioManagerコンポーネントを持つGameObjectをドラッグ&ドロップします。 Volume Sliderフィールドに自身のスライダーをドラッグ&ドロップします。
- スライダーオブジェクトのインスペクターで、
- スライダーの範囲
- スライダーの
Min ValueとMax Valueは、スクリプトが起動時に0.0001〜1へ設定します。インスペクターでの設定は不要です。
- スライダーの
これにより、スライダーを操作することでBGMの音量をリアルタイムに調整できるようになります。
注意点

- パラメータ名の一致
AudioMixer内で公開したパラメータ名(この例ではBGMVolume)が、スクリプト内のBgmVolumeParameterと一致していることを確認してください。不一致があると音量の設定や取得が正しく動作しません。
- 音量の単位と範囲
AudioMixerのSetFloatで設定する音量はデシベル(dB)単位です。通常は-80dB(ほぼ無音)から0dB(元の音量)の範囲で使い、Volumeは+20dBまで上げることもできます。このサンプルでは0〜1の値をデシベルに変換して設定するため、スライダーのような操作と相性が良くなります。
- スライダーの値をそのまま渡さない
- スライダーの標準範囲は0〜1です。この値をデシベルとして
SetFloatに渡すと、0〜1dBとなり音量がほとんど変わりません。必ず0〜1の値をデシベルに変換してから設定します。
- スライダーの標準範囲は0〜1です。この値をデシベルとして
- AudioMixerの割り当て
- スクリプト内の
audioMixerフィールドに正しいAudioMixerが割り当てられていることを確認してください。割り当て忘れがあるとエラーが発生します。
- スクリプト内の
- オーディオソースのグループ設定
- BGM用のオーディオソースが正しく
BGMグループに割り当てられていることを確認してください。異なるグループに割り当てられていると、意図した音量制御が適用されません。
- BGM用のオーディオソースが正しく
- スクリプトの依存関係
BGMVolumeSliderスクリプトがAudioManagerに依存しているため、AudioManagerがシーン内に存在し、正しく設定されている必要があります。
参考資料
- Unity公式ドキュメント: AudioMixer
- Unity公式チュートリアル: Audio Mixer Basics
- Unity公式フォーラム: AudioMixerの使い方に関するディスカッション
以上の手順とスクリプトを参考に、AudioMixerを使用したBGM音量の制御を実装してください。









ディスカッション
コメント一覧
まだ、コメントがありません