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