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

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


目次

  1. 概要
  2. 必要な準備
  3. スクリプトの作成
  4. Unityエディタでの設定
  1. 使用例
  2. 注意点
  3. 参考資料

概要

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


必要な準備

  1. Unityのインストール: 最新版のUnityエディタがインストールされていることを確認してください。
  2. プロジェクトの作成: 新規プロジェクトを作成するか、既存のプロジェクトを使用します。
  3. オーディオファイルの準備: BGMとして使用するオーディオファイル(例: .mp3, .wav)をプロジェクトにインポートします。

スクリプトの作成

まず、AudioMixerを操作するためのC#スクリプトを作成します。以下はAudioManager.csという名前のスクリプトの完全な例です。

AudioManager.cs

using UnityEngine;
using UnityEngine.Audio;

public class AudioManager : MonoBehaviour
{
    [SerializeField]
    private AudioMixer audioMixer;

    // BGMVolumeのパラメータ名(AudioMixerで設定した名前と一致させる)
    private string bgmVolumeParameter = "BGMVolume";

    void Start()
    {
        // 初期音量を設定(デシベル単位)
        SetBGMVolume(-20f);

        // 現在のBGM音量を取得して表示
        float currentVolume;
        if (GetBGMVolume(out currentVolume))
        {
            Debug.Log("現在のBGM音量: " + currentVolume + " dB");
        }
        else
        {
            Debug.LogError("BGMVolumeパラメータの取得に失敗しました。");
        }
    }

    /// <summary>
    /// BGMの音量を設定します。
    /// </summary>
    /// <param name="volume">音量(デシベル単位)</param>
    public void SetBGMVolume(float volume)
    {
        if (audioMixer != null)
        {
            audioMixer.SetFloat(bgmVolumeParameter, volume);
        }
        else
        {
            Debug.LogError("AudioMixerが割り当てられていません。");
        }
    }

    /// <summary>
    /// BGMの現在の音量を取得します。
    /// </summary>
    /// <param name="volume">取得した音量(デシベル単位)</param>
    /// <returns>成功すればtrue、失敗すればfalse</returns>
    public bool GetBGMVolume(out float volume)
    {
        if (audioMixer != null)
        {
            return audioMixer.GetFloat(bgmVolumeParameter, out volume);
        }
        volume = 0f;
        Debug.LogError("AudioMixerが割り当てられていません。");
        return false;
    }
}

スクリプトの説明

  • [SerializeField] private AudioMixer audioMixer;
    • インスペクターからAudioMixerを割り当てるためのフィールド。SerializeField属性により、プライベート変数でもインスペクター上で編集可能です。
  • SetBGMVolume(float volume) メソッド
    • 指定したデシベル値でBGMの音量を設定します。AudioMixer内でBGMVolumeというパラメータが存在する必要があります。
  • GetBGMVolume(out float volume) メソッド
    • 現在のBGM音量を取得します。AudioMixer.GetFloatは音量の取得に成功すればtrueを返し、失敗すればfalseを返します。
  • Start() メソッド
    • スクリプトの開始時に初期音量を設定し、現在の音量をログに表示します。

Unityエディタでの設定

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

4.1 AudioMixerの作成と設定

  • AudioMixerの作成
    • Unityエディタで、Assetsフォルダ内で右クリックし、Create > Audio Mixerを選択します。
    • 新しいAudioMixerに適切な名前を付けます。例: MainAudioMixer.
  • グループの設定
    • 作成したAudioMixerをダブルクリックして開きます。
    • デフォルトで存在するMasterグループの下に新しいグループを作成します。
      • 右クリックしてCreate Groupを選択し、名前をBGMとします。
  • パラメータのエクスポート
    • BGMグループを選択し、インスペクターでVolumeパラメータの横にあるExposedボタンをクリックします。
    • エクスポートされたパラメータにBGMVolumeという名前を付けます。
      • これにより、スクリプトからBGMVolumeを参照できるようになります。

4.2 AudioManagerスクリプトの設定

  • スクリプトの追加
    • 先ほど作成したAudioManager.csスクリプトを、プロジェクト内の適当なフォルダに保存します。例: Scriptsフォルダ。
  • GameObjectへのアタッチ
    • シーン内の適当なGameObject(例: AudioManagerという名前の空のGameObject)を選択します。
    • インスペクターでAdd Componentボタンをクリックし、AudioManagerスクリプトをアタッチします。
  • AudioMixerの割り当て
    • アタッチしたAudioManagerコンポーネントのAudio Mixerフィールドに、先ほど作成したMainAudioMixerをドラッグ&ドロップします。

4.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)
        {
            // 初期スライダー値を現在の音量に設定
            float currentVolume;
            if (audioManager.GetBGMVolume(out currentVolume))
            {
                volumeSlider.value = currentVolume;
            }

            // スライダーの値が変更されたときに音量を設定
            volumeSlider.onValueChanged.AddListener(SetVolume);
        }
        else
        {
            Debug.LogError("AudioManagerまたはVolumeSliderが割り当てられていません。");
        }
    }

    /// <summary>
    /// スライダーの値に基づいてBGMの音量を設定します。
    /// </summary>
    /// <param name="volume">スライダーの値</param>
    public void SetVolume(float volume)
    {
        if (audioManager != null)
        {
            audioManager.SetBGMVolume(volume);
        }
    }
}

使用手順

  • スライダーの作成
    • シーン内にUIのスライダーを追加します。
      • メニューからGameObject > UI > Sliderを選択します。
  • BGMVolumeSliderスクリプトの追加
    • 新しくBGMVolumeSlider.csというスクリプトを作成し、上記のコードを貼り付けます。
    • スクリプトをスライダーオブジェクトにアタッチします。
  • スクリプトの設定
    • スライダーオブジェクトのインスペクターで、BGMVolumeSliderコンポーネントのAudioManagerフィールドに、AudioManagerコンポーネントを持つGameObjectをドラッグ&ドロップします。
    • Volume Sliderフィールドに自身のスライダーをドラッグ&ドロップします。

これにより、スライダーを操作することでBGMの音量をリアルタイムに調整できるようになります。


注意点

  • パラメータ名の一致
    • AudioMixer内でエクスポートしたパラメータ名(この例ではBGMVolume)が、スクリプト内のbgmVolumeParameterと一致していることを確認してください。不一致があると音量の設定や取得が正しく動作しません。
  • デシベルの範囲
    • SetFloatで設定する音量はデシベル(dB)単位です。一般的には-80dB(ほぼ無音)から0dB(最大音量)の範囲で設定します。必要に応じて適切な範囲に調整してください。
  • AudioMixerの割り当て
    • スクリプト内のaudioMixerフィールドに正しいAudioMixerが割り当てられていることを確認してください。割り当て忘れがあるとエラーが発生します。
  • オーディオソースのグループ設定
    • BGM用のオーディオソースが正しくBGMグループに割り当てられていることを確認してください。異なるグループに割り当てられていると、意図した音量制御が適用されません。
  • スクリプトの依存関係
    • BGMVolumeSliderスクリプトがAudioManagerに依存しているため、AudioManagerがシーン内に存在し、正しく設定されている必要があります。

参考資料


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

Audio,Unity

Posted by hidepon