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

在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了。

猜你喜欢

转载自blog.csdn.net/qq_40323256/article/details/88619932