シーンを移動しても、同じサウンドを鳴らし続けられる仕組みを作りましょう。
シーンをロードしたタイミングで、BGMが消されないように、スクリプトで制御します。
シーンの準備
シーン名をScene1に変更します。
こういうダイアログが出てくれば、再ロードをクリックします。
もう一つシーンを作成し、名前をScene2にします。
プレーヤーのCubeが、Sphereにぶつかれば、シーンが切り替わるようにします。
Scene1の中に、CubeとSphereを作成し、少し距離をとります。
Cubeにリジッドボディを追加し、UseGravityのチェックを外します。
シーン2に遷移するためのスクリプトを書きます。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class CubeMove : MonoBehaviour { private float speed = 3.0f; void Start() { DontDestroyOnLoad(gameObject); } void Update() { float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * speed; float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * speed; transform.position = new Vector3 ( transform.position.x + moveX, 0, transform.position.z + moveZ ); } void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Sphere") { SceneManager.LoadScene("Scene2"); } } } |
4行目、using UnityEngine.SceneManagement; を忘れずに書いておきましょう。
シーンの追加
ビルド設定から、シーンを追加します。
Scene1を追加します。
ビルド設定の画面は閉じておきます。
この状態で、いったんScene1を保存しておきます。
続いて、Scene2をダブルクリックして開きます。
Scene2のライティング設定を行います。
ウィンドウ > レンダリング > ラインティング設定
ライティングの生成をクリックしましょう。
こちらも同様に、ビルド設定から、シーンを追加します。
ビルド設定の画面は閉じておきます。
ここで一旦、Scene2を保存します。
シーンが変わってもサウンドの続きが鳴る
Scene1を開き、空のオブジェクトを作成します。
GameObject(空のオブジェクト)にオーディオソースを追加し、音楽データを入れます。
ゲーム開始時に再生と、ループにチェックを入れます。
SoundManager.csを作成し、GameObjectに追加します。
SoundManager.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SoundManager : MonoBehaviour { void Start() { DontDestroyOnLoad(gameObject); } } |
ゲームプレイしましょう。
Cubeを操作して、Sphereに触れるとScene2へ遷移します。
Scene2へ移っても、BGMの続きが鳴っていればOKです。