Unityでサウンドを再生する簡単な方法は、Audio SourceゲームオブジェクトにPlay On AwakeプロパティとLoopプロパティをオンにすればいい。
しかしSceneからSceneへ遷移する場合とBGMのゲームオブジェクトが消えてしまうため、この方法ではBGMを継続して再生されません。
この問題を解決するには、BGMのゲームオブジェクトがシーンに遷移しても消えないようにする必要があります。
そこでObjectクラス(MonoBehaviourの基底クラス)のDontDestroyOnLoad関数で実現できます。
BGM用オブジェクトを作成
BGM用オブジェクトを作成するためにまずはじめに空のゲームオブジェクトを作成します。オブジェクト名は「MainSoundObject」にしておきます。
音楽ファイルをBGM用オブジェクトに追加
音楽ファイルをBGM用オブジェクトに追加します。
AssetからBGMにしたいWAVファイルを、
MainSoundObjectにドラッグして追加します。
Scriptを追加する
MainSoundObjectにScriptを追加します。
Script名は「MainSoundScript」で言語はC#とします。
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が鳴っていることが確認できました。