0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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」にも存在しています。

最後までご覧いただきありがとうございました :laughing:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?