2014-10-27 61 views
3

我必须在关闭应用程序之前销毁它吗?或在退出GB收集他们?Unity3D - 什么时候“DontDestroyOnLoad对象”被破坏?

DontDestroyOnLoad如何工作?有参考数量的东西?

+0

我敢肯定的应用destoy之前exiting.I'd猜测,无论管理场景摧毁移动到下一个场景,除非该对象已被标记为不被前一个场景使用的对象遭到破坏,但我猜测。 – MVCDS 2014-10-27 13:52:03

回答

3

在场景中实例化的对象(默认情况下)在加载新场景(级别)时被破坏。 使用DontDestroyOnLoad,你告诉不要遵循这种行为,以便该对象将在各个层次之间保持不变。你可以通过调用Destroy()函数来删除它。

documentation

使加载一个新的场景,当对象目标不会被自动销毁。 当加载一个新的关卡时,场景中的所有对象都被销毁,然后加载新关卡中的对象。为了在级别加载期间保存一个对象,请调用DontDestroyOnLoad。如果对象是组件或游戏对象,则其整个变换层次结构也不会被销毁。

using UnityEngine; 
using System.Collections; 

public class ExampleClass : MonoBehaviour { 
    void Awake() { 
     DontDestroyOnLoad(transform.gameObject); 
    } 
} 
2

当您更改场景在场景中的所有非静态对象被销毁。当一个物体被标记为DontDestroyOnLoad时,它在改变场景时不会被破坏。

如果以后你希望你销毁对象可以调用

Destroy(objName); 

有时它是有用,如果你回到最初创建该对象的场景。如果在创建之前无法销毁一个或未能检查它已经存在,则最终会有两个相同类型的对象,并且这两个对象都是不可破坏的。

如果您的应用程序退出,您将不必担心自己破坏任何东西,它会为您完成。


使对象在程序的整个执行过程中保持活动状态的另一种方法是使其保持静态。

public static class DataContainer 
{ 
}