前に同じようなネタを記事にした記憶が・・・
と思って探してみたらやはりあった!!
この方法は、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を切り替えるぐらいだったら他にも方法はありそうだが・・・
シングルトン自体はいろいろ使えそうな感じがする