シーンをまたいで存在するゲームオブジェクトの作り方

Unityでシーンを切り替えると、当然ながら元のシーンにあったゲームオブジェクトは新しいシーンには引き継がれません。

しかしゲームを作っていると「シーンをまたいで存在するゲームオブジェクト」を作りたくなる時があります。今回はそのようなゲームオブジェクトの作り方について説明します。


※この記事で使用しているUnityのバージョン:Unity2019.1

シーンをまたいでも破棄されないゲームオブジェクトの作り方

このようなオブジェクトの作り方はとても簡単です。スクリプトでDontDestroyOnLoad()メソッドを使い、破棄したくないオブジェクトを指定すればいいのです。

例えば、下のスクリプトをあるゲームオブジェクトにアタッチすると、そのゲームオブジェクトはシーンをまたいでも破棄されなくなります。

using UnityEngine;

public class TestScript : MonoBehaviour
{

    void Start()
    {
    DontDestroyOnLoad(gameObject);
  }

}

ただし単純にこの方法を使う場合、「シーンに1つだけあればいいオブジェクト」がシーンの切り替えによって重複して存在してしまう場合があることに注意する必要があります。

例えばプレイヤーキャラが各シーンに1人ずつ配置されていた場合、プレイヤーキャラを破棄しないオブジェクトに指定すると、シーンを移動したときにプレイヤーキャラが2人以上存在することになってしまいます。しかし、かといって各シーンからプレイヤーキャラを消してしまうと、テストプレイの時にいちいち最初からプレイしなければならなくなってしまいますね。これでは困ります。

そこでUnityでは「シングルトン」という仕組みが導入されることがあります。このシングルトンというのは、「シーンに必ず1つだけ存在することを保証するゲームオブジェクト」のことです。少し難しいのでここでは詳しく説明しませんが、姉妹サイトのページ「シングルトンなゲーム管理オブジェクトの作り方」で丁寧に説明していますので、興味のある方はそちらをご覧ください。