Unity研究所<Unityによるゲーム開発、映像開発>

Unity初心者おやじが綴るゲームで小遣い稼ぎできるようになるまでのブログ

Unity 小ネタ シングルトンでシーンが移動してもBGMが途切れないようにする

前に同じようなネタを記事にした記憶が・・・

 

と思って探してみたらやはりあった!!

harukichi.hatenadiary.jp

 

この方法は、Awake()の中でDontDestroyOnLoad(gameObject)を読んでいるだけなので、すべてのシーンで同じBGMを流し続けるならよいが、下記のような場合は途中でBGMは変えたいところ・・・

 

①タイトルのシーン  ⇒BGM開始

②ゲーム選択のシーン ⇒ここまでは途切れることなくBGMを流しておく

➂実際のゲームシーン ⇒ここからはBGMを変える

 

ということで、「シングルトン」なるもので実装してみた

 

★タイトルのシーンのスクリプト

タイトルのシーンのインスタンスを後からアクセスするために削除されないようにする

BGMはAudiosourceで自動でならす

public static StartSceneManager  instance = null;  

private void Awake()
{

    if (instance == null)
    {
         instance = this;
         DontDestroyOnLoad(gameObject);

    }
    else
    {
       Destroy(gameObject);

    }
}

 

BGMをほかのシーンからアクセスして止めるために関数を作っておいた

public void BGMStop()
{
  audioSource.Stop();

}

 

〇実際のゲームシーンに移動する場合のスクリプト

 次のシーンを呼び出す前か、次のシーンのStart関数にて

   下記のようにinstanceを介して、BGMを止める関数にアクセス

 

   StartSceneManager.instance.BGMStop();

 SceneManager.LoadScene("GameScene");

 

 

説明は以上

 

BGMを切り替えるぐらいだったら他にも方法はありそうだが・・・

シングルトン自体はいろいろ使えそうな感じがする