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音量の制御を実装してください。
ディスカッション
コメント一覧
まだ、コメントがありません