シーン移動してもBGMを続けて流したい時にDontDestroyOnLoadを使うと増殖してしまう場合の解決法

結論から言うとフタバゼミ様が出しているやり方を参考にすればいいです。

以下に示します。

futabazemi.net

 

 

 

以下メモ書き

 

シーンを移動しても同じ音楽を続けて鳴らしたい場合、

DontDestroyOnLoadを使う方法がある。

 

オーディオソースのオーディオクリップに流したいBGMを入れて、

ゲーム開始時に再生にチェックを入れると起動時にBGMが流れるようになる。

(長く流すならループにチェックしてループさせる)

 

f:id:sashimimayonezu:20220412215237p:plain

オーディオソース

これでBGMを流せるが、これだけだとシーン移動したときに

オーディオソースがなくなってしまう。

下の例はボタンクリックでシーン移動する場合。

f:id:sashimimayonezu:20220412220423g:plain

シーン移動の例

そこでシーンが移動しても引き継ぐために、DontDestroyOnLoadを使う。

下記が使用したスクリプト

 

DDManager.cs

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class DDManager : MonoBehaviour
  6. {
  7.  
  8.     public GameObject Gamesystem;
  9.  
  10.     void Start()
  11.     {
  12.         DontDestroyOnLoad(Gamesystem);
  13.     }
  14.  
  15. }

 

引き継ぎたいオブジェクト(今回はオーディオソース)に上記のスクリプトを付け,

DDManager.csのGamesystemにオーディオソースを入れる。

 

f:id:sashimimayonezu:20220412221943p:plain


これでオーディオソースが破壊されず、BGMを次のシーンに引き継ぐことができる。

しかしこのスクリプトだとシーンを戻ったりするときどんどん増えていく問題がある。

例を下に示す。

f:id:sashimimayonezu:20220412223420g:plain

オーディオソースが破壊されないため増殖してしまう

上記はタイトル→メインシーン→タイトルと移動した場合。

タイトルに戻った時に新たに生成されるオーディオソースが破壊されないため、

タイトルに戻った数だけオーディオソースが増えてしまう。これだととてもうるさい。

 

そこで2つ目以降はオブジェクトが破壊されるようなスクリプトが必要になり、

そのスクリプトが書かれているサイトのリンクを一番上に貼った。

 

https://help.hatenablog.com/entry/developer-option?_gl=1*ojnx55*_gcl_au*NzA5NzY1Mzc3LjE3MTA2NTgyODA.