Unityでシーンを切り替えると、元のシーンにあったゲームオブジェクトは新しいシーンにはもちこめない。。。
2DRPGを作成していたら、[町] -> [森] -> [洞窟]とフィールドをシーン別に作成したくなります。
そんな時はどうすればよいか、自分なりに調べたことをブログにまとめようと思います。
事前に準備しておくこと
- 複数のシーン作成
- [Build Settings]でシーン追加
- シーンを切り替えるスクリプト作成
- シーンをまたぐゲームオブジェクトの処理を行うスクリプトの作成
[Build Settings]でシーン追加
シーンを切り替えるには[Build Settings]でシーン追加する必要あります。
- [File] -> [Bulid Settings]を選択
- [Project]からシーンを追加
シーンを切り替えるスクリプト作成
シーンの切り替え処理は[UnityEngine.SceneManagement]を使用します。
using UnityEngine.SceneManagement;
シーンの切り替え方は以下の通りです。
SceneManager.LoadScene("シーンのファイル名")
シーンをまたぐゲームオブジェクトのスクリプト作成
スクリプトでDontDestroyOnLoad()メソッドに破棄したくないオブジェクトを指定して使います。
Object-DontDestroyOnLoad - Unity スクリプトリファレンス
以下のようにゲームオブジェクトにアタッチすると、そのゲームオブジェクトはシーンをまたいでも破棄されなくなります。
(AudioManagerを参考に。。。17行目にDontDestroyOnLoad使用)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AudioManager : MonoBehaviour { public AudioSource[] sfx; public AudioSource[] bgm; public static AudioManager instance; // Start is called before the first frame update void Start() { instance = this; DontDestroyOnLoad(this.gameObject); }