LoginSignup
54
47

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-01-27

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

54
47
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
47