DontDestroyOnLoad的使用

参考自Unity3D研究院之DontDestroyOnLoad的坑

1.DontDestroyOnLoad可以保证Gameobject以及上面绑定的组件不会销毁,在处理全局控制的时候有用。
public class ExampleClass :[MonoBehaviour](http://www.jianshu.com/MonoBehaviour.html){
void Awake() {
DontDestroyOnLoad(transform.gameObject);
}}
2.使用DontDestroyOnLoad的时候需要注意的坑:

由于使用DontDestroyOnLoad的物体不会被释放掉,假设我们写了上面的代码,而物体所在的游戏场景又可以重复进入的时候,游戏物体就会在每次进入场景的时候创建一次,甚至可以无限创建下去,这样的处理明显不妥。

3.针对性的解决方案:
方案1:在每次调用DontDestroyOnLoad的时候,都去判断场景中是否有对应的物体,如果没有再去创建
public class ExampleClass :[MonoBehaviour](http://www.jianshu.com/MonoBehaviour.html){
void Awake() {
If(Gameobject.Find("GlobalController"))
 DontDestroyOnLoad(transform.gameObject);
}}
方案2:把DontDestroyOnLoad的调用写到最初始的场景,并且保证相应的场景中不存在再次进入的可能性
方案3:把使用DontDestroyOnLoad的脚本进行静态初始化,在静态初始化的时候进行DontDestroyOnLoad操作
public class Global:MonoBehaviour
{
public static Globalinstance;
static Global()
{
GameObjectgo=newGameObject("Globa");
DontDestroyOnLoad(go);
instance=go.AddComponent();
}

public voidDoSomeThings()
{
Debug.Log("DoSomeThings");
}

voidStart()
{
Debug.Log("Start");
}
}

调用方便,也封装方便,同样的方法可以使用在单例等的构建上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,284评论 25 708
  • 三天了心里依然堵得慌,即使神怠懒言但脑子里却总是不停地浮现着您的身影。那过往的点点滴滴,朝朝暮暮怎一个忘字...
    梅酒煮年华阅读 213评论 1 1
  • <c:forEach>标签 <c:forEach>标签的主要功能为循环控制,可以将集合中的成员进行迭代输出,功能与...
    kylelin阅读 480评论 0 1