Object.DontDestroyOnLoad

매뉴얼로 전환
public static void DontDestroyOnLoad (Object target);

파라미터

targetThe object which is not destroyed on scene change.

설명

Makes the object target not be destroyed automatically when loading a new scene.

When loading a new level, all objects in the scene are destroyed, then the objects in the new level are loaded. In order to preserve an object during level loading call DontDestroyOnLoad on it. If the object is a component or game object then its entire transform hierarchy will not be destroyed either.

Note: DontDestroyOnLoad does not return a value. It is also intended to have its argument changed. The typeof operator makes this change if it is needed.

Calling DontDestroyOnLoad can make the object exist on all scenes. In the example below there are two scenes - ExampleScript1 and ExampleScript2.. One has a Cube and the other a Sphere. A DontDestroyOnLoad function on the first scene is connected to a Cylinder. This is loaded in Awake. When the ExampleScript1 button is pressed ExampleScript1 is closed and ExampleScript2 is loaded. The Cylinder from ExampleScript1 is copied to ExampleScript2. When ExampleScript2 is closed by pressing the Button ExampleScript1 is reloaded. This scene always has the Cylinder. The management of the Cylinder is the DontDestroyOnLoad function.

ExampleScript1:

// Connected to the Cube and includes a DontDestroyOnLoad()
// LoadScene() is called by the first  script and switches to the second.

using UnityEngine; using UnityEngine.SceneManagement;

public class ExampleScript1 : MonoBehaviour { private static bool created = false;

void Awake() { if (!created) { DontDestroyOnLoad(this.gameObject); created = true; Debug.Log("Awake: " + this.gameObject); } }

public void LoadScene() { if (SceneManager.GetActiveScene().name == "scene1") { SceneManager.LoadScene("scene2", LoadSceneMode.Single); } } }

ExampleScript2:

// Connected to the Cube and includes a DontDestroyOnLoad()
// LoadScene() is called by the second script and loads the first.

using UnityEngine; using UnityEngine.SceneManagement;

public class ExampleScript2 : MonoBehaviour { public void LoadScene() { if (SceneManager.GetActiveScene().name == "scene2") { SceneManager.LoadScene("scene1", LoadSceneMode.Single); } } }
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961