Version: 2017.3

Object.DontDestroyOnLoad

切换到手册
public static void DontDestroyOnLoad (Object target);

参数

target 更换场景时不销毁的对象。

描述

加载新场景时,不自动销毁对象 /target/。

加载新关卡时,将销毁场景中的所有对象,然后加载新关卡中的对象。 要在加载关卡期间保留对象,请对其调用 DontDestroyOnLoad。 如果对象是组件或游戏对象,则其整个变换层级视图都不会销毁。

__注意:__.DontDestroyOnLoad 不返回任何值。该函数的设计意图是对其参数进行更改。如果需要,可以使用 typeof 运算符进行此更改。

调用 DontDestroyOnLoad 可使对象存在于所有场景中。在下面的示例中,有两个场景 - ExampleScript1 和 /ExampleScript2/。一个包含立方体,另一个包含球体。第一个场景中的 DontDestroyOnLoad 函数连接到一个圆柱体。该圆柱体在 Awake 中加载。按下 ExampleScript1 按钮时,将关闭 ExampleScript1 并加载 ExampleScript2。ExampleScript1 中的圆柱体将复制到 ExampleScript2。按下 ExampleScript2 按钮时,将关闭 ExampleScript2,并重新加载 ExampleScript1。该场景将始终包含此圆柱体。该圆柱体由 DontDestroyOnLoad 函数进行管理。

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); } } }