こんにちは!夜の街2Dアクションゲームを制作中の怪獣です🦖
今回はゲームを起動した瞬間に、 BGMを自動再生する方法を解説します。
BGMが入るだけで、画面の印象やゲームの世界観が一気に引き締まり、ゲームらしさがグッと増します!
BGMはゲーム全体で共通の要素なので、
今回は MainManagerで一括管理し、UnityのInspectorから設定できる形にします。
この記事ですること
- ゲーム開始時にBGMが自動で再生される
- BGMは MainManager が管理する
- BGMの設定は コードを書き換えず Inspector から変更できる
① BGM用Prefabを作成する
BGMオブジェクトを作成
Prefab化するように、まずはBGMオブジェクトを作成していきます。
Hierarchy → Create Empty → 名前を BGMに変更する
AudioSourceを追加し、以下を設定します。

AudioSourceは以下を設定します。
| 項目 | 設定 |
|---|---|
| AudioClip(再生する音声ファイルを指定) | 使用したいBGMをドラッグする |
| Play On Awake(オブジェクトが生成された瞬間に自動再生するか) | ✅ ON |
| Loop(音を繰り返し再生するか) | ✅ ON |
| Volume(音量) | 0.2〜0.5(好み) |
Prefab化する
Hierarchy の BGM を Project ウィンドウへドラッグして Prefab にします。
Prefab化したら、シーン上の BGM オブジェクトは削除してOKです。

② MainManagerに処理を書く
MainManager.csに以下の処理を書いていきます。(コピペOK!)
using UnityEngine;
public class MainManager : MonoBehaviour
{
[SerializeField, Header("BGM設定")] private GameObject _bgmPrefab; // ← BGM を割り当て
private static GameObject _bgmInstance;
private void Awake()
{
// BGM開始
_PlayBGM();
}
private void _PlayBGM()
{
// すでにBGMが生成されている場合は何もしない
if (_bgmInstance != null) return;
// BGMを生成(Prefab側の Play On Awake で再生される)こ
_bgmInstance = Instantiate(_bgmPrefab);
// シーンをまたいでもBGMを維持したい場合
DontDestroyOnLoad(_bgmInstance);
}
}
③各処理の説明(初心者向け)
BGMの設定、制御について
[SerializeField, Header("BGM設定")]
private GameObject _bgmPrefab;
- Unity上のInspectorに表示するための属性
- Unity上の設定で、①でPrefabしたBGMをドラッグします
Inspectorでは次のように表示されます⬇️
MainManager
└ BGM設定
└ Bgm Prefab
private static GameObject _bgmInstance;この変数は、今、BGMがすでに存在しているか?を覚えておくためのものです。
後に説明していますが、この情報を持たせておくことでBGMの二重再生防止ができます。
また、staticにすることで以下の設定をすることができます。
- 新しい MainManager が作られても参照できるようになる
- シーンが変わっても値が保持される(シーンをまたいでもBGMを維持したい場合)
_PlayBGM()
if (_bgmInstance != null) return;すでにBGMが存在していたら、何もしないということをしています。
- BGMが鳴っている状態で
- もう一度生成するのを防ぐ
これで二重再生を防止するようにしています。
_bgmInstance = Instantiate(_bgmPrefab);BGMのPrefabを生成して、変数に保存しています。
- Prefabを実体化
- 生成されたオブジェクトを
_bgmInstanceに代入
これで、「今鳴っているBGMはこれだ」と MainManager が把握できるようになります。
DontDestroyOnLoad(_bgmInstance);シーンが切り替わっても、このBGMを消さない、ということをしています。
- リトライ
- ステージ切り替え
- タイトル → ゲーム
でも 同じBGMを鳴らし続けたい場合 に使います。
※ シーンごとにBGMを変えたい場合は、この行を削除 or 制御を変えます。
④ Unity上でBGMを設定する方法
- Hierarchyで MainManager を選択する
- Inspectorの「BGM設定」欄を確認
Bgm Prefabに
作成した BGM.prefab をドラッグ&ドロップします
これで設定完了です✨
コードを触らずにBGMを差し替え可能になります。
動作確認
➡️BGMを入れることで一気にゲームの世界観が出ますね!
トラブルシューティング
上手くいかない場合は以下を見直してみてください。
BGMが鳴らない
- Inspectorで
_bgmPrefabが未設定になっている - AudioSource の
Play On Awakeが OFFのまま - AudioClip が未設定になっている
BGMが二重で鳴る
static GameObject _bgmInstanceが無いDontDestroyOnLoadを使っているのに
別シーンにも MainManager が存在している
まとめ
- BGMは MainManager で管理するのがわかりやすい
- SerializeField + Header を使うと Inspector から設定できる
- Prefab化 + Instantiate で柔軟なBGM再生が可能
- static管理で二重再生を防ぐ
この記事ではゲーム開始時にBGMを自動再生させる方法を解説しました。
最後まで読んでいただきありがとうございました。
この記事が少しでもゲーム制作に役立てたら嬉しいです🦖
次回の記事では、「プレイヤーがマップから落下したら、ゲームオーバーUIを表示する」実装方法を解説していきます!



コメント