ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

Unityで2DのRPGを作る - シーンをまたいでもゲームオブジェクトを引き継ぎたい

Unityでシーンを切り替えると、元のシーンにあったゲームオブジェクトは新しいシーンにはもちこめない。。。
2DRPGを作成していたら、[町] -> [森] -> [洞窟]とフィールドをシーン別に作成したくなります。
そんな時はどうすればよいか、自分なりに調べたことをブログにまとめようと思います。

事前に準備しておくこと

  • 複数のシーン作成
  • [Build Settings]でシーン追加
  • シーンを切り替えるスクリプト作成
  • シーンをまたぐゲームオブジェクトの処理を行うスクリプトの作成

複数のシーン

切り替え用に複数のSceneを作成しておきます。


[Build Settings]でシーン追加

シーンを切り替えるには[Build Settings]でシーン追加する必要あります。

  • [File] -> [Bulid Settings]を選択

  • [Project]からシーンを追加

f:id:a1026302:20200928154137j:plain


シーンを切り替えるスクリプト作成

シーンの切り替え処理は[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);
    }