Unity でシーンをまたいで BGM を再生させるにはいくつか方法があります。
- DontDestoyOnLoad() 関数を使う
- メインのシーンで再生を行い、シーンの遷移は LoadSceneMode.Additive を使う(Unity 5.3 以降)
DontDestoyOnLoad() 関数を使う
BGM 用のオブジェクトを作り、スクリプトで DontDestroyOnLoad を実行します。
1 2 3 |
void Start () { DontDestroyOnLoad (gameObject); } |
これだけ。
メインのシーンで再生を行い、シーンの遷移は LoadSceneMode.Additive を使う(Unity 5.3 以降)
Unity 5.3 でマルチシーン編集機能が追加され、シーンとシーンを合成したりできるようになりました。これを利用して、BGM を再生する最小限のシーンを置き、そこに他のシーンを追加読み込み、破棄することでシーン遷移を実現します。
まず、シーンマネージャの名前空間を読み込み、
1 |
using UnityEngine.SceneManagement; |
追加のシーン読み込みは下記のコードで実現します。
1 |
SceneManager.LoadScene ("シーン名", LoadSceneMode.Additive); |
破棄は以下。
1 |
SceneManager.UnloadScene ("シーン名"); |
メリット・デメリット
メリット | デメリット | |
---|---|---|
DontDestoyOnLoad | シーン数が少なければシーンの構造をシンプルに保てる | デバッグなどで初めのシーンを外してしまうと鳴らない |
マルチシーン編集 | シーンが増えた際にいろいろ柔軟に対応しやすい | …? |
書きながら、よっぽどシーンの増えない予定のものじゃなければマルチシーン編集がいいのでは?と思われ始めた。何かもっとスマートな方法があればどなたか教えてくださいm(_ _)m