やりたいこと
- BGMを流す
- シーン遷移しても継続してBGMを流す
- シーン遷移したらBGMを流しているオブジェクトを破壊する
BGMを流す
- 「AudioSource」コンポーネントをアタッチしたオブジェクトを作成
- 「AudioClip」にBGMを紐付ける
以上です。
シーンが読み込まれたらBGMを流す場合は、「Play On Awake」にチェックを入れておいてください。(一応、デフォルトでチェックが入っています)
また、BGMをループさせたい場合は、「Loop」にチェックを入れておいてください。
シーン遷移してもBGMが途切れないようにする
スクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BGMTest : MonoBehaviour {
void Start () {
DontDestroyOnLoad (this); //画面遷移してもオブジェクトが壊れないようにする
}
}
上記のスクリプトを、BGMを流しているゲームオブジェクトにアタッチした状態でゲームを再生すると、Hierarchyに下のようなものが現れます。このようになっていればOKです。
シーンを跨いでも曲が中断されることなく、流れ続けます。
シーンを読み込むたびに曲の先頭から再生したいという場合はこの方法を使用せず、シーンごとにAudioSourceをアタッチしたゲームオブジェクトを用意すれば大丈夫です。
シーン遷移したらBGMを流しているオブジェクトを破壊する
シーンを跨いで曲を再生したい部分と、また別のBGMを再生したい部分ってありますよね。
そこで、先ほどのシーンを跨いでも壊れないようにしたオブジェクトを壊すスクリプトを作ろうと思います。
スクリプト①
シーン遷移後に破壊する方法。
スクリプトは遷移後のシーンにあるオブジェクトにアタッチしてください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BGMDestroy : MonoBehaviour
{
void Start()
{
GameObject obj = GameObject.Find ("BGMTestObj"); //""で囲んだ名前のゲームオブジェクトを探す
Destroy (obj);
}
}
スクリプト②
シーン遷移時に破壊する方法。
シーン遷移用のスクリプトに、オブジェクトを破壊するコードを組み込んでみました。
シーン遷移の解説はこちらの記事をご覧ください↓
https://qiita.com/mizuki170817/items/7fabff96c35aac7fb555
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Scene: MonoBehaviour {
[SerializeField] private string _loadScene; //読み込むシーン
public void SceneChange()
{
GameObject obj = GameObject.Find ("BGMTestObj");
Destroy (obj);
SceneManager.LoadScene(_loadScene);
}
}
シーン遷移のコードに組み込むことによって、スクリプトの個数は一つ減らせますが、シーン遷移のパターン(曲を連続させる、させない)によって複数個関数を用意しないといけないことになるので、①の方が楽…なのかな?と思います。
最後に
他にもBGMの流し方のパターンが思い付いたらどんどん更新していこうと思います。シーン遷移とのうまい組み合わせ方も考えなくては…
最後まで読んでいただき、ありがとうございました。