DontDestroyOnLoadとは?
DontDestroyOnLoad(以下、DDOL)とは、
特定のゲームオブジェクトがシーンを移動しても破棄されないようにするための方法です。
DDOLを利用することで、そのゲームオブジェクトとその子オブジェクトが
シーン遷移時に破棄されず、情報や設定を保持することが可能になります。
逆に、DDOLを使用しない場合、シーンが切り替わる(アンロードされる)と、
そのシーンに存在するすべてのゲームオブジェクトは破棄されます。
そのため、シーンが切り替わってもオブジェクトを残しておきたい場合に有効です。
DDOLをスクリプトから設定する
下記のコードを残したいゲームオブジェクトにアタッチしましょう。
using UnityEngine;
public class DDOL : MonoBehaviour
{
private void Awake()
{
// DDOLに登録する
DontDestroyOnLoad(gameObject);
}
}
これだけ?と思うかもしれません。これだけです。
実際にテストしてみる
では、これだけで本当にゲームオブジェクトが残るのか実際に確かめてみましょう。
適当に2つのシーンを作ります。「Scene 1」と「Scene 2」にしました。
次に、シーンを遷移させる処理を実装しましょう。
適当なオブジェクトに下記のコードをアタッチします。
using UnityEngine.SceneManagement;
public class DDOLTest : MonoBehaviour
{
void Start()
{
SceneManager.LoadScene("Scene 2");
}
}
SceneManager.LoadScene()の引数には、遷移先のシーン名を指定しましょう。
なお、インスタンスを作成せずにLoadSceneメソッドを呼び出せる理由は、
SceneManagerが静的クラスであるためです。
また、シーンを実行する前に「Build Settings」の「Scenes In Build」の欄に
「Scene 1」と「Scene 2」をドラッグアンドドロップしましょう。
「Build Settings」はメニューバーの「File」から選択できます。
この状態で「Scene 1」を実行してみましょう。
DDOLクラスをアタッチしたオブジェクトが「Scene 2」にも存在しています。
最後までご覧いただきありがとうございました