シーンを遷移してもBGMを継続して再生する方法

  • 34
    Like
  • 1
    Comment
More than 1 year has passed since last update.

Unityでサウンドを再生する簡単な方法は、Audio SourceゲームオブジェクトにPlay On AwakeプロパティとLoopプロパティをオンにすればいい。

しかしSceneからSceneへ遷移する場合とBGMのゲームオブジェクトが消えてしまうため、この方法ではBGMを継続して再生されません。

この問題を解決するには、BGMのゲームオブジェクトがシーンに遷移しても消えないようにする必要があります。

そこでObjectクラス(MonoBehaviourの基底クラス)のDontDestroyOnLoad関数で実現できます。

BGM用オブジェクトを作成

BGM用オブジェクトを作成するためにまずはじめに空のゲームオブジェクトを作成します。オブジェクト名は「MainSoundObject」にしておきます。

unity2015-01-27_16_17_58.png

音楽ファイルをBGM用オブジェクトに追加

音楽ファイルをBGM用オブジェクトに追加します。
AssetからBGMにしたいWAVファイルを、
MainSoundObjectにドラッグして追加します。

Scriptを追加する

MainSoundObjectにScriptを追加します。
Script名は「MainSoundScript」で言語はC#とします。

unity2015-01-27_12_01_53.png

BGM用Scriptを記述する

BGM用ScriptにDontDestroyOnLoad関数を追加して、Sceneが遷移してもオブジェクトが消えないようにします。

using UnityEngine;
using System.Collections;

public class MainSoundScript : MonoBehaviour {
    public bool DontDestroyEnabled = true;

    // Use this for initialization
    void Start () {
        if (DontDestroyEnabled) {
            // Sceneを遷移してもオブジェクトが消えないようにする
            DontDestroyOnLoad (this);
        }
    }

    // Update is called once per frame
    void Update () {

    }
}

遷移処理を書く

遷移してもBGMが鳴ることを確認するためにキーを押すと、Sceneを遷移するように処理を追加します。
ここでは「A」を押すと遷移するようにします。

if ( Input.GetKeyDown(KeyCode.A) == true ) {
    Debug.Log("Now scene is " + Application.loadedLevelName);
    // Aキーを押すとシーンが遷移する
    Application.LoadLevel("Scene2");
}

最後に

Sceneを移動しても、BGMが鳴っていることが確認できました。

参考文献

Unityではじめる2Dゲーム作り徹底ガイド スマートフォンでも遊べる本格ゲーム開発に挑戦 Chapter13

Unity - Scripting API: Object.DontDestroyOnLoad