Unity中DontDestroyOnLoad在切换场景时的坑点

发表于2018-11-10
评论5 1.18w浏览
在unity中我们经常要用到DontDestroyOnLoad来使一个gameobject在切换场景的时候不被销毁而保留下来,但是有时会遇到这样的情况,在Loading场景建立一个空物体,我给它起名叫test,上面挂一个脚本,如图
脚本里的代码是这样的
void Start () 
{
    DontDestroyOnLoad(this);
}
这段代码只有一个作用,那就是使test这个物体在切换场景的时候不被销毁而保留下来

一开始我从Loading场景切换到Main场景,结果是这样的
ok,现在看起来很正常,test被保留了下来

现在我在Main场景加一个按钮,这个按钮的作用是切换回Loading场景,然后我按下那个按钮,现在场景被切换回了Loading场景,如图
现在,你发现了什么,test物体变成了两个!
这绝对不是我们想要的,那么如何解决这个问题呢?
可以在想要切换场景保留的物体上加一个单例类,当然啦,这个类最好是有实际的作用,这个单例类实现如下
private static RequestManager _instance;
public static RequestManager Instance { get { return _instance; } }
private void Awake()
{
	if (_instance != null)
	{
		Destroy(this.gameObject); return;
	}
	else
	{
		_instance = this;
	}
}
这里的RequestManager就是你要加的单例类的类名,你可以更换成你的单例类的类名,然后把他挂载到test物体上,然后我们重新测试一下,由Loading场景切换到Main场景,再点击按钮切换回Loading场景,现在的结果,如图
这次只有一个test物体,这样就不会出现由Main场景切换回Loading场景时,产生两个物体test了。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: