UnityにおけるAudioMixerを使用したBGM音量制御の技術資料
本資料では、UnityのAudioMixerを活用してBGM(バックグラウンドミュージック)の音量を設定および取得する方法について詳細に解説します。提供するC#スクリプトと設定手順に従うことで、プロジェクト内での音量制御を効率的に実装できます。
概要
UnityのAudioMixerは、オーディオのミキシングと制御を行う強力なツールです。本資料では、AudioMixerを用いてBGMの音量を動的に設定および取得する方法について解説します。具体的には、AudioManagerクラスを作成し、スクリプトから音量を操作する手順を示します。
必要な準備
- Unityのインストール: 最新版のUnityエディタがインストールされていることを確認してください。
- プロジェクトの作成: 新規プロジェクトを作成するか、既存のプロジェクトを使用します。
- オーディオファイルの準備: 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というパラメータが存在する必要があります。
- 指定したデシベル値でBGMの音量を設定します。
GetBGMVolume(out float volume)メソッド- 現在のBGM音量を取得します。
AudioMixer.GetFloatは音量の取得に成功すればtrueを返し、失敗すればfalseを返します。
- 現在のBGM音量を取得します。
Start()メソッド- スクリプトの開始時に初期音量を設定し、現在の音量をログに表示します。
Unityエディタでの設定
次に、Unityエディタ上での設定手順について説明します。
4.1 AudioMixerの作成と設定
- AudioMixerの作成
- Unityエディタで、
Assetsフォルダ内で右クリックし、Create>Audio Mixerを選択します。 - 新しい
AudioMixerに適切な名前を付けます。例:MainAudioMixer.
- Unityエディタで、
- グループの設定
- 作成した
AudioMixerをダブルクリックして開きます。 - デフォルトで存在する
Masterグループの下に新しいグループを作成します。- 右クリックして
Create Groupを選択し、名前をBGMとします。
- 右クリックして
- 作成した
- パラメータのエクスポート
BGMグループを選択し、インスペクターでVolumeパラメータの横にあるExposedボタンをクリックします。- エクスポートされたパラメータに
BGMVolumeという名前を付けます。- これにより、スクリプトから
BGMVolumeを参照できるようになります。
- これにより、スクリプトから
4.2 AudioManagerスクリプトの設定
- スクリプトの追加
- 先ほど作成した
AudioManager.csスクリプトを、プロジェクト内の適当なフォルダに保存します。例:Scriptsフォルダ。
- 先ほど作成した
- GameObjectへのアタッチ
- シーン内の適当なGameObject(例:
AudioManagerという名前の空のGameObject)を選択します。 - インスペクターで
Add Componentボタンをクリックし、AudioManagerスクリプトをアタッチします。
- シーン内の適当なGameObject(例:
- AudioMixerの割り当て
- アタッチした
AudioManagerコンポーネントのAudio Mixerフィールドに、先ほど作成したMainAudioMixerをドラッグ&ドロップします。
- アタッチした
4.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)
{
// 初期スライダー値を現在の音量に設定
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を選択します。
- メニューから
- シーン内にUIのスライダーを追加します。
- BGMVolumeSliderスクリプトの追加
- 新しく
BGMVolumeSlider.csというスクリプトを作成し、上記のコードを貼り付けます。 - スクリプトをスライダーオブジェクトにアタッチします。
- 新しく
- スクリプトの設定
- スライダーオブジェクトのインスペクターで、
BGMVolumeSliderコンポーネントのAudioManagerフィールドに、AudioManagerコンポーネントを持つGameObjectをドラッグ&ドロップします。 Volume Sliderフィールドに自身のスライダーをドラッグ&ドロップします。
- スライダーオブジェクトのインスペクターで、
これにより、スライダーを操作することでBGMの音量をリアルタイムに調整できるようになります。
注意点
- パラメータ名の一致
AudioMixer内でエクスポートしたパラメータ名(この例ではBGMVolume)が、スクリプト内のbgmVolumeParameterと一致していることを確認してください。不一致があると音量の設定や取得が正しく動作しません。
- デシベルの範囲
SetFloatで設定する音量はデシベル(dB)単位です。一般的には-80dB(ほぼ無音)から0dB(最大音量)の範囲で設定します。必要に応じて適切な範囲に調整してください。
- AudioMixerの割り当て
- スクリプト内の
audioMixerフィールドに正しいAudioMixerが割り当てられていることを確認してください。割り当て忘れがあるとエラーが発生します。
- スクリプト内の
- オーディオソースのグループ設定
- BGM用のオーディオソースが正しく
BGMグループに割り当てられていることを確認してください。異なるグループに割り当てられていると、意図した音量制御が適用されません。
- BGM用のオーディオソースが正しく
- スクリプトの依存関係
BGMVolumeSliderスクリプトがAudioManagerに依存しているため、AudioManagerがシーン内に存在し、正しく設定されている必要があります。
参考資料
- Unity公式ドキュメント: AudioMixer
- Unity公式チュートリアル: Audio Mixer Basics
- Unity公式フォーラム: AudioMixerの使い方に関するディスカッション
以上の手順とスクリプトを参考に、AudioMixerを使用したBGM音量の制御を実装してください。




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