UnityにおけるAudioMixerを使用したBGM音量制御の技術資料

2026年10月24日

広告

本資料では、UnityのAudioMixerを活用してBGM(バックグラウンドミュージック)の音量を設定および取得する方法について詳細に解説します。提供するC#スクリプトと設定手順に従うことで、プロジェクト内での音量制御を効率的に実装できます。

概要

UnityのAudioMixerは、オーディオのミキシングと制御を行う強力なツールです。本資料では、AudioMixerを用いてBGMの音量を動的に設定および取得する方法について解説します。具体的には、AudioManagerクラスを作成し、スクリプトから音量を操作する手順を示します。


必要な準備

  1. Unityのインストール: Unity 6 以降のUnityエディタがインストールされていることを確認してください。
  2. プロジェクトの作成: 新規プロジェクトを作成するか、既存のプロジェクトを使用します。
  3. オーディオファイルの準備: 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というパラメータが公開されている必要があります。
  • GetBGMVolume(out float volume) メソッド
    • 現在のBGM音量を0〜1の値で取得します。AudioMixer.GetFloatは取得に成功すればtrueを返し、失敗すればfalseを返します。デシベルから0〜1への戻しはMathf.Pow(10, db / 20)です。
  • Start() メソッド
    • スクリプトの開始時に初期音量を設定し、現在の音量をログに表示します。
  • [DefaultExecutionOrder(-100)]
    • Start()の実行順を他のスクリプトより先にする属性です。スライダー側が音量を取得するより前に、初期音量の設定を終えられます。

Unityエディタでの設定

次に、Unityエディタ上での設定手順について説明します。

ポイント1 AudioMixerの作成と設定

  • AudioMixerの作成
    • Unityエディタで、Assetsフォルダ内で右クリックし、Create > Audio Mixerを選択します。
    • 新しいAudioMixerに適切な名前を付けます。例: MainAudioMixer.
  • グループの設定
    • 作成した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スクリプトをアタッチします。
  • AudioMixerの割り当て
    • アタッチしたAudioManagerコンポーネントのAudio Mixerフィールドに、先ほど作成したMainAudioMixerをドラッグ&ドロップします。

ポイント3 オーディオソースの設定

  • BGM用のオーディオソースの作成
    • シーン内にBGMを再生するためのオーディオソースを持つGameObjectを配置します。例: BGMPlayer.
  • オーディオソースの設定
    • 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を選択します。
  • 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の値をデシベルに変換してから設定します。
  • AudioMixerの割り当て
    • スクリプト内のaudioMixerフィールドに正しいAudioMixerが割り当てられていることを確認してください。割り当て忘れがあるとエラーが発生します。
  • オーディオソースのグループ設定
    • BGM用のオーディオソースが正しくBGMグループに割り当てられていることを確認してください。異なるグループに割り当てられていると、意図した音量制御が適用されません。
  • スクリプトの依存関係
    • BGMVolumeSliderスクリプトがAudioManagerに依存しているため、AudioManagerがシーン内に存在し、正しく設定されている必要があります。

参考資料


以上の手順とスクリプトを参考に、AudioMixerを使用したBGM音量の制御を実装してください。

訪問数 265 回, 今日の訪問数 1回

広告

Audio,Unity

Posted by hidepon