Unityでゲームを作る際、BGM(音楽)やSE(効果音)はゲームの雰囲気を大きく左右します。
- BGMをシーンごとに切り替えたい!
- 攻撃やジャンプのSE(効果音)を追加したい!
- 音量を変更したり、フェードイン・フェードアウトを実現したい!
UnityをAudioSource活用すれば、簡単なBGMやSEを制御できます!
この記事では、基本的な音の再生方法から、BGMのループ管理、フェード処理、最適化のテクニックまで詳しく解説します!
この記事でわかること
- BGM・SEの基本的な再生方法(AudioSource / AudioClip)
- 音量の変更・ループ設定・フェード処理
- 効果音をスクリプトで制御する方法
- サウンド管理の最適化(オーディオプール・負荷軽減)
UnityのBGM・SEの使い方
AudioSourceとAudioClipの関係
Unityでは、AudioSource(音を再生する)とAudioClip(音のデータ)を組み合わせてサウンドを管理します。
➡ AudioClipはAssets/Audio/などに保存!(フォルダは作成しましょう)
➡ AudioSource にAudioClipを追加してサウンドを再生!
項目 | 役割 |
---|---|
Audio Source | 音を再生・停止・ループするコンポーネント |
AudioClip | 音のデータ(WAV、MP3、OGGなど) |
AudioSourceの追加方法
① Hierarchy から追加
・ [Hierarchie] → [右クリック] → [Audio] → [Audio Source] を選択
・ AudioSourceオブジェクトがシーンに追加される
※ この他にも以下のサイトを参考にしてください。
AudioSourceの構成要素(ミュート、ループ、音量・音程)

設定項目 | 説明 | 主な用途 |
---|---|---|
Audio Resource | 再生する音声ファイルを設定 | 効果音やBGMを設定 |
Output | Audio Mixer(音の管理) に接続する | 音量やエフェクトをMixerで調整したいとき |
Mute | 音をミュート(消音)する | 特定の条件で音を無効化 |
Play On Awake | シーン開始時に自動再生 する ※ シーン開始時はStart関数も起動するためスクリプトで設定することを推奨 | ゲーム開始時にBGMを流したいとき |
Loop | ループ再生する ※ BGMの時はチェック SEの時はチェックなし | BGMや環境音を繰り返し再生 |
Volume | 音量(0.0 ~ 1.0) | 音の大きさを調整 |
Pitch | 音程 | 高音・低音の変化をつけたいとき |
Spatial Blend | 2D / 3D の音のバランス ※ 2D:0 、3D:1 | 3Dゲームで距離による音の変化をつける |
Doppler Level | ドップラー効果(音の速さ変化) | 車や飛行機など、移動する音にリアル感を出す |
Spread | 音の広がり(3D音響用) | 音がどれくらい広がるか調整 |
Min / Max Distance | 音が聞こえる範囲 | 3D 音響で音の届く距離を設定 |
スクリプトでBGMを再生・停止・一時停止・再開
➡スクリプトで制御すれば、BGMの切り替えが簡単に!
※ AudioSourceのAudio ResourceにAudioClipをアタッチしてください
using UnityEngine;
public class BGMExample : MonoBehaviour
{
public AudioSource audioSource;
//BGMを開始
void BGMStart()
{
audioSource.Play();
}
//BGMを停止
void BGMStop()
{
audioSource.Stop();
}
//BGMを一時停止
void BGMPause()
{
audioSource.Pause();
}
//BGMを再開
void BGMUnPause()
{
audioSource.UnPause();
}
}
SE(効果音)を再生する
効果音はアクション(ジャンプ・攻撃・クリック)に応答して再生するのが基本です。
効果音をスクリプトで再生
➡ PlayOneShot()を使うと、他の音と重ねて再生可能!
public AudioSource audioSource;
public AudioClip jumpSE;
void Update()
{
//「Space」キーを押すとSEが流れる
if (Input.GetKeyDown(KeyCode.Space))
{
audioSource.PlayOneShot(jumpSE);
}
}
複数のSEを管理する(サウンドマネージャー)
複数のSEを管理するために、サウンドマネージャーを作成すると便利!
※ Sound Managerというオブジェクトを作成してこのスクリプトをアタッチしておくとシーンが切り替わっても使用できます!
public class SoundManager : MonoBehaviour
{
public static SoundManager instance;
public AudioSource audioSource;
public AudioClip jumpSE;
public AudioClip hitSE;
void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public void PlaySE(AudioClip clip)
{
audioSource.PlayOneShot(clip);
}
}
・サウンドマネージャーの使い方
➡ グローバル管理することで、どこからでもSEを再生可能!
SoundManager.instance.PlaySE(SoundManager.instance.jumpSE);
BGMのフェードイン・フェードアウト
BGMをスムーズに行うために、音量を少しずつ変更するテクニック。
フェードイン
➡ 最初に音量0から、徐々にBGMを再生します!
IEnumerator FadeInBGM(AudioSource source, float duration)
{
float time = 0;
while (time < duration)
{
source.volume = Mathf.Lerp(0, 1, time / duration);
time += Time.deltaTime;
yield return null;
}
source.volume = 1;
}
フェードアウト
➡ BGMをスムーズに演出に最適!
IEnumerator FadeOutBGM(AudioSource source, float duration)
{
float time = 0;
float startVolume = source.volume;
while (time < duration)
{
source.volume = Mathf.Lerp(startVolume, 0, time / duration);
time += Time.deltaTime;
yield return null;
}
source.Stop();
source.volume = startVolume;
}
サウンドの最適化
音声ファイルの圧縮
・ MP3 / OGGを使うとファイルサイズを削減できる!
・ WAVは高いですが、サイズが大きいので注意してください!
AudioSourceを減らしてパフォーマンス向上
・ BGM用はAudioSource1つだけする!
・ SEはPlayOneShot()使って複数再生!
サウンドオブジェクトをプールする
Instantiate()/Destroy()は負荷が大きいため、オブジェクトプールを活用します。
※ この方法は有効性が不明なため参考程度にお願いします。
➡ オブジェクトプールを活用すると、サウンド再生の負荷を軽減できる!
using System.Collections.Generic;
using UnityEngine;
public class AudioPool : MonoBehaviour
{
public AudioSource audioPrefab;
private Queue<AudioSource> pool = new Queue<AudioSource>();
public AudioSource GetAudioSource()
{
if (pool.Count > 0)
{
AudioSource source = pool.Dequeue();
source.gameObject.SetActive(true);
return source;
}
return Instantiate(audioPrefab);
}
public void ReturnAudioSource(AudioSource source)
{
source.gameObject.SetActive(false);
pool.Enqueue(source);
}
}
まとめ
・ AudioSource+AudioClipを使えば簡単にBGMやSEを再生できる!
・ BGMはloop = true、SEはPlayOneShot()を活用!
・フェード処理を実現すれば、スムーズなBGM切り替えが可能!
・オーディオの最適化(ファイル圧縮・プーリング)で負荷を軽減!